Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu Python shebang行不工作_Python_Linux_Ubuntu_Python 2.7_Ubuntu 12.04 - Fatal编程技术网

Ubuntu Python shebang行不工作

Ubuntu Python shebang行不工作,python,linux,ubuntu,python-2.7,ubuntu-12.04,Python,Linux,Ubuntu,Python 2.7,Ubuntu 12.04,无法在Ubuntu for python脚本中使用shebang行。我每次只得到一个未找到的命令错误 test.py #!/usr/bin/env python print ('!') 跑 在shebang中使用了python的不同位置,但没有运气,包括由哪个python提供的内容。有关于如何解决此问题的提示吗 感谢python,它说: 要在Unix上轻松使用Python脚本,您需要使它们 可执行文件,例如带有 $chmod+x脚本,并在 剧本。一个好的选择通常是 #!/usr/bin/en

无法在Ubuntu for python脚本中使用shebang行。我每次只得到一个未找到的命令错误

test.py

#!/usr/bin/env python

print ('!')

在shebang中使用了python的不同位置,但没有运气,包括由哪个python提供的内容。有关于如何解决此问题的提示吗

感谢python,它说:

要在Unix上轻松使用Python脚本,您需要使它们 可执行文件,例如带有

$chmod+x脚本,并在 剧本。一个好的选择通常是

#!/usr/bin/env python 在整个路径中搜索Python解释器。然而, 某些Unice可能没有env命令,因此您可能需要硬编码 /usr/bin/python作为解释器路径


我不知道这是否适用于您。

如果您试图以

$ test.py
这个错误可能与shebang无关。相反,test.py所在的目录不在
路径中。试一试

$ ./test.py
绕过
路径
查找


(这是为了确保脚本本身是可执行的。)

除了使用前面的点执行脚本或使其可执行之外,可能还有另一个问题:

如果您尝试使用使用windows编辑器编写的脚本,它可能包含windows行结尾。移除这些可以使shebang再次工作

要删除此类线端点,请参阅,例如

另请参见我对失败的shebang评估的一般评论。

确保“第一行”是shebang。 不要在文件开头添加任何换行符。
开头没有换行符”

这可能是由于内核配置错误。选项,并检查是否已设置:


如果此命令的输出是除
CONFIG\u BINFMT\u SCRIPT=y
之外的任何内容,这意味着您的内核将不允许您使用shebangs。您需要获取一个新内核,或者使用
CONFIG\u BINFMT\u SCRIPT=y

重新编译当前内核,确保您的行尾是unix
\n
换行符。我用nano制作了测试文件。我通常使用sublime,但这是在我的服务器上,所以在nano中快速启动它。我真的不知道如何在nano中查看特殊字符。我只是假设,因为我是在linux上制作的,所以它可以适当地处理新的行;文件是否可执行?(
chmod+xscriptname.py
)确实如此。不确定这是否有帮助,但如果我运行(/usr/bin/python test.py),它会像champ一样运行,
file test.py
会说什么?我以为我的apply和我已经尝试使用这些路径,但无法运行。这是我在测试中的主要问题,你能解释一下。/test.py的逻辑是如何工作的吗?当你的命令由一个单词组成时,shell在存储在
PATH
中的每个目录中查找该命令,从第一个目录开始,使用找到的第一个匹配项。当前目录(.)通常不在
PATH
中,因为它可能存在安全风险,因此需要将确切路径指定为
/test.py
(当前目录中的文件
test.py
)。不是一直问,但为什么路径是一个安全风险?@DrewK:将当前目录添加到路径被认为是一个安全风险,因为攻击者可以通过在当前目录中放置脚本来“覆盖”标准命令。想象一下一个定制的
ls
脚本,除了不显示名为
的目录之外,它的行为与正常的
ls
完全相同。邪恶隐藏的东西
…我从来没有见过它这样说,但我认为反对将“.”放在
路径中的建议会扩展到任何相对路径。其思想是,查找应该符合一组固定的目录,而不依赖于当前的工作目录。
$ ./test.py
zcat /proc/config.gz | grep CONFIG_BINFMT_SCRIPT