【发布时间】:2022-01-24 04:40:49
【问题描述】:
在将文件作为参数传递时,如何让 bash 尊重 shebang?
例如: hello.py
#!/usr/bin/env python
print("Hello Python")
当传递给 bash:
$ bash hello.py
hello.py: line 2: syntax error near unexpected token `"Hello Python"'
hello.py: line 2: `print("Hello Python")'
不幸的是,在我使用的环境中,我无法直接执行 hello.py,它必须通过向 bash 提供 args 来完成。
【问题讨论】:
-
当然 Bash 会忽略它,它是一个注释; shebangs 适用于内核。你想运行
/usr/bin/env python hello.py,对吗?只是想确定一下,因为我还可以想象带有更具描述性的错误消息的 Bash 错误是另一种选择。 -
bash SOMEFILE将 SOMEFILE 作为 bash 脚本执行。这在 bash 手册页中有描述。您可以写bash -c ./hello.py来强制使用 #!正在考虑的行(假设 hello.py 是可执行的),但这会创建一个额外的(不必要的)子进程,因为您可以通过./hello.py来同样好地运行它。