Ubuntu Python shebang行不工作
无法在Ubuntu for python脚本中使用shebang行。我每次只得到一个未找到的命令错误 test.pyUbuntu 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
#!/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