#!/ usr / bin / python(sha
我在文件中有以下内容
demo.py:- //可执行位设置
#!/usr/bin/python
import os
我在终端中使用了命令bash demo.py ,并期望第一行由bash解释,并且它将文件处理为python解释器。 但它调用二进制“/ usr / bin / import”(使用strace来计算)。 sh也是一样的demo.py。 然而运行./demo.py的作品。 男人bash说
“如果程序是以#!开头的文件,则第一行的其余部分指定程序的解释器。”
这没有发生。
使用bash版本
$ bash --version
GNU bash,版本4.2.8(1)-release(i686-pc-linux-gnu)版权所有(C)2011自由软件基金会,许可证GPLv3 +:GNU GPL版本3或更高http://gnu.org/licenses /gpl.html
这是免费软件; 你可以自由改变和重新分配它。 没有担保,在法律允许的范围内。
在Ubuntu 11.04中
bash文档是正确的:当你在bash命令提示符中输入./demo.py
时,bash使用shebang行来确定将运行脚本的可执行文件。
当你执行bash demo.py
,当然bash会尝试将它作为bash脚本运行。 因为你告诉它。 (想象一下,如果你有一个不正确的shebang行的bash脚本 - 你将如何运行它?通过直接将它传递给bash,就是这样。)
如果你想启动另一个运行你的Python脚本的bash shell,那么使用bash -c ./demo.py
来执行demo.py
作为bash命令而不是bash脚本。 但是你不需要启动另一个shell来运行一个Python脚本。
我认为你对她的声音系列的含义感到困惑。
#!/usr/bin/python
这意味着./demo.py
将作为/usr/bin/python demo.py
。
但是,使用/bin/bash demo.py
, bash
会尝试将demo.py
解释为shell脚本文件,并且会失败,也就是说, python
将不会执行。
您需要将其作为bash -c ./demo.py
或sh -c ./demo.py
,否则文件中的每一行都将作为bash命令执行(而不是使用she-bang执行该文件)。