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