python - #!/bin/sh vs #!/usr/local/bin/python 在可执行文件中

标签 python bash shell shebang

pip程序中,She-bang是

#!/usr/local/bin/python

if __name__ == "__main__":
    # Python program body

在 Python 启动器提供的 Install Certificates.command 中:

#!/bin/sh

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 << "EOF"

# python program body

EOF

这两种方法之间有什么区别吗?有什么理由比另一个更喜欢一个吗?

在我看来它们都是一样的,除了第二个多了一个 bash 子例程。这样对吗?

最佳答案

在一般情况下,您只需指定您实际需要的解释器。

除此之外,您有时会看到像这样的解决方法作为可移植性黑客。在 POSIX 系统上,/usr/bin/env 很好地涵盖了大多数场景;但是,如果您需要对旧系统或其他特殊系统的可移植性,请回退到最低公分母,然后再回到可以可靠运行的地方,例如各种系统上的 Python 可能需要各种不明显的结构。 (之前的 - upvoted! - Dan D. 的回答就是一个很好的例子。)

在某些情况下,您希望 sh 设置一些东西(例如,获取一些在使用 sh 语法的文件中指定的环境变量),然后hand over execution到 Python;

#!/bin/sh
# source some variables
. /etc/defaults/myenv.sh
# Then run Python
exec env python -c '
# ... Your Python script here
    ' "$@"

关于python - #!/bin/sh vs #!/usr/local/bin/python 在可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499544/

相关文章:

python - Django 过滤器 - Iregex 只匹配完整的单词

Python: AttributeError: 'NoneType' 对象没有属性 'findNext'

python - 为什么 `python` 指向我系统的默认 python 解释器,而不是我的 `pyenv` python 解释器?

linux - 如何从单独的目录创建单独的 tar 文件并复制到/tmp 目录

c - C 语言中的 Shell

python - 获取当前的 windows media player 实例

bash - 提取 shell 中两个行号之间的行

bash - 使用 sendmail 强制内容类型

bash - 如何在 bash 中打印用法和缺少参数错误?

shell - Elixir - 从 shell 调用模块函数