这个问题在这里已有答案:
我有这个非便携式的shebang:
#!/usr/bin/env python -u
它是不可移植的,因为 python -u 在我的系统上作为单个arg提供给 env .
python -u
env
挑战:让这个shebang便携 changing the shebang only - 也就是说 one-liner .
换句话说,没有解决方案
来自问题Disable output buffering
来自问题Cannot pass an argument to python with "#!/usr/bin/env python"
我使用以下内容:
#!/bin/sh """true" exec python -u "$0" "$@" """ # python code goes here
第 """true" 行将 sh 解析为 true ,因为它由空 "" 字符串后跟 "true" 组成 . 由于 true 是一个无操作命令,因此它将被有效忽略,并且以下行将执行Python解释器 .
"""true"
sh
true
""
"true"
另一方面,Python将以非常不同的方式解析 """true" 行,因为triple-quoted string的开头以 true" 开头并且在下面两行关闭 . 由于字符串不用于任何东西,Python解释器将有效地忽略启动Python的shell片段 . 这是 """xxx" 的解释上的差异,它允许Python和 sh 代码在同一个脚本中共存 .
true"
"""xxx"
对于简单的测试,请添加如下内容:
import sys print "hello!", sys.argv
给定合理的 sh 实现(并考虑到启动Python的时间),这不应该比使用 env 慢得多 .
1 回答
我使用以下内容:
第
"""true"
行将sh
解析为true
,因为它由空""
字符串后跟"true"
组成 . 由于true
是一个无操作命令,因此它将被有效忽略,并且以下行将执行Python解释器 .另一方面,Python将以非常不同的方式解析
"""true"
行,因为triple-quoted string的开头以true"
开头并且在下面两行关闭 . 由于字符串不用于任何东西,Python解释器将有效地忽略启动Python的shell片段 . 这是"""xxx"
的解释上的差异,它允许Python和sh
代码在同一个脚本中共存 .对于简单的测试,请添加如下内容:
给定合理的
sh
实现(并考虑到启动Python的时间),这不应该比使用env
慢得多 .