#!/ usr/bin/python(sha-bang或she-bang)在bash中不起作用

Tal*_*Kit 1 python bash ubuntu

我在文件中有以下内容

demo.py:- //可执行位集

#!/usr/bin/python
import os
Run Code Online (Sandbox Code Playgroud)

我在终端中使用了命令bash demo.py并期望第一行由bash解释并且它将文件处理为python解释器.但它调用二进制文件"/ usr/bin/import"(使用strace计算).sh demo.py也是如此.但运行./demo.py有效.男子巴什说

"如果程序是以#!开头的文件,则第一行的其余部分指定程序的解释器."

这没有发生.

使用bash版本

$ bash --version

GNU bash,版本4.2.8(1)-release(i686-pc-linux-gnu)版权所有(C)2011 Free Software Foundation,Inc.许可证GPLv3 +:GNU GPL版本3或更高版本http://gnu.org/licenses /gpl.html

这是免费软件; 您可以自由更改并重新分发它.在法律允许的范围内,不提供任何担保.

在Ubuntu 11.04

kin*_*all 8

bash文档是正确的:当你进入./demo.pybash命令提示符时,bash使用shebang行来确定将运行脚本的可执行文件.

当你这样做的bash demo.py时候,当然bash会尝试将它作为bash脚本运行.因为你说过了.(想象一下,如果你有一个不正确的shebang行的bash脚本 - 你将如何运行它?通过这种方式将它直接传递给bash.)

如果你想开始是运行在Python脚本另一个bash shell中,然后使用bash -c ./demo.py执行demo.py 的bash命令,而不是作为一个bash脚本.但是你不应该只是为了运行Python脚本而启动另一个shell.

  • 不,bash不看shebang线; 它通过kernal调用命令(通过调用`exec*()`函数之一),内核解释`#!`行. (3认同)
  • @Talespin_Kit:没错。(我有点困惑,你不同意我的观点吗?) (2认同)

jco*_*ado 6

我觉得你对她的意思很困惑.

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

这意味着./demo.py将执行为/usr/bin/python demo.py.

但是,使用/bin/bash demo.py,bash将尝试解释demo.py为shell脚本文件并将失败,即python不会执行.