草庐IT

python - 我应该把 shebang 行放在每个 python 文件中吗?

我正在处理一个中型python(2.7)项目,其中导入了多个文件。我有一个启动程序的主要python文件。其他文件包含类定义、函数等。我想知道我是应该将shebang行放在每个python文件中还是只放在我运行的文件中以启动我的程序? 最佳答案 只有您将通过直接调用它们来执行的文件才需要shebang。小提示:如果一个文件包含if__name__=="__main__":main()最好(坚持最少惊讶原则)从shebang开始。确保让shebang健壮;宁愿有#!/usr/bin/envpython比#!/usr/bin/pytho

python - "shebang/usr/bin/env python"调用了错误的 Python 解释器

这里发生了什么?!$/usr/bin/envwhichpython/home/dbanas/.local/bin/python$/home/dbanas/.local/bin/python-VPython2.7.3--EPD_free7.3-2(64-bit)$/usr/bin/envpython-VPython2.4.3我偶然发现了这个,试图调试我的一个Python脚本,它使用了一个#!/usr/bin/envpython第一行。我不明白这怎么可能。谢谢!-db我只是注意到“~/.local/bin/python”是一个链接,而不是可执行文件。这会以某种方式破坏“/usr/bin/e

python - conda 托管环境中的 Shebang

我正在尝试用Hy编写程序并按照Quickstartpage上的说明运行它在文档中。所以我根据文档使用GitHub存储库中的pip安装了Hy,然后使用chmod+xmyfile.hy为文件添加了可执行权限。为了管理我的Python环境,我使用Anaconda的conda,而不是virtualenv。因此,shebang#!/usr/bin/envhy对我不起作用,因为condaenvs位于不同的目录中。从condainfo--envs我看到他们的目录是myenv*/home/myname/.conda/envs/myenvroot/home/myname/anaconda3现在尝试使用#

Git:如何处理不同的shebang

人们如何处理本地和远程之间的不同shebang?例如,我的本地python是/usr/bin/python,而我的Web主机是一个专门构建的python,位于~/local/bin/python。首席开发人员可能在/usr/bin/ruby中有ruby​​,而我的是/usr/local/bin/ruby。我手动编辑了shebang,但随后git将其标记为更改。理想情况下,我希望git忽略文件的第一行,或者忽略文件中行的正则表达式匹配。在我看来,这一定是一个非常普遍的问题,但我找不到任何提及。我使用git,但无论如何我都不会称自己为专家。 最佳答案

linux - Ubuntu cron shebang 不工作

我有一个脚本将其作为shebang#!/usr/bin/envNode。当cron运行我的脚本时,我收到此错误/usr/bin/env:node:Nosuchfileordirectory。当我以我的用户身份运行脚本时,脚本运行良好,只是不是作为cron。我猜这是因为Node不在运行cron的用户的PATH上?我怎样才能让这个shebang与cron一起工作?$哪个Node给我/home/myuser/.nvm/v0.11.14/bin/node 最佳答案 Cron作业在受限环境中运行。在交互式shell中,您的$PATH可能设置在

python - 在 shell 脚本中使用 shebang

在Linux中,我们通常在脚本中添加一个shebang来调用相应的解释器。我尝试了以下示例。我写了一个shell脚本,没有shebang和可执行权限。我能够使用./执行它。但是如果我写一个类似的python程序,没有shebang,我就无法执行它。为什么会这样?据我了解,shebang需要找到翻译。那么shell脚本如何工作,而不是python脚本? 最佳答案 我的假设是没有shebang的脚本在当前环境中执行,在命令行中是您的默认shell,例如/bin/bash。 关于python-

linux - Mono 框架 shebang linux

我有一个C#源文件。有没有什么办法可以放置类似#!/usr/bin/envmono的东西,这样它就会被编译然后作为可执行文件运行:以python为例,我会这样做:#!/usr/bin/envpython事实上,我想要的是在编译后运行脚本而不调用“monothe.exe”。我想要类似“./the.exe”的东西。 最佳答案 编辑:我刚刚注意到您想对单个源文件执行此操作——对单个源文件。Mono附带的csharpREPL几乎支持这一点。然而,REPL吐出一个语法错误,因为它不理解shebang行并将其视为预处理器定义。如果我误解了你说的

linux - shell 脚本 : Using grep and tr in the shebang

我的系统上有这个脚本:#!/bin/grepcatcaterpillarcatlolmorecat当我运行它时,我得到了预期的输出,#!/bin/grepcatcaterpillarcatmorecat但是,如果我改用tr,在脚本中#!/usr/bin/tr'a''e'caterpillarcatlolmorecat我希望得到#!/usr/bin/tr'a''e'ceterpillercetlolmorecet但是没有打印任何内容,如果我手动键入cat,我会得到c/t。如何更改脚本使其表现得像第一个脚本? 最佳答案 shebang行

linux - 了解 shebang 行中的 awk -f 选项

我正在阅读某人的awk脚本。以header#!/usr/bin/envawk-f开头。env命令没有-f选项。因此,他们必须为awk命令传递-f选项。我查看了awk的手册页。它说Awk扫描每个输入文件以查找与prog中字面指定的一组模式或指定为-fprogfile的一个或多个文件中的任何模式匹配的行。对于每个模式,都可以有一个关联的操作,当文件的一行与该模式匹配时将执行该操作。根据我的理解,这意味着awk通过搜索具有progfile/prog中指定模式的行来处理输入文件,具体取决于您是否对awk使用-f选项。并且根据使用的模式,对输入文件中找到的行执行关联的操作。我的问题是……在运行a

linux - 为什么 LD_PRELOAD 对没有 shebang 的脚本不生效?

如果在运行脚本时使用LD_PRELOAD指定要预加载的库,我发现实际上仅当脚本有shebang行时才预加载该库。例如,给定这个脚本:#NotashebangechoHello和这个命令:LD_PRELOAD=/path/to/preload_me.so./script.sh脚本在完全没有加载库的情况下运行,我可以通过其初始化代码的(非)效果来监控。另一方面,如果我添加一个shebang行:#!/bin/shechoHello...然后当我通过同一命令运行脚本时,库被加载。指定哪个解释器似乎并不重要。当然,我也可以使用/bin/bash或我尝试过的任何其他sh系列shell。为什么会有差