make#!/ usr / bin / env python -u shebang portable

时间:2013-10-10 19:12:30

标签: python shebang

我有这个非便携式的shebang:

#!/usr/bin/env python -u

它不可移植,因为python -u作为单个arg提供给我的系统上的env

挑战:让这个shebang便携只改变shebang - 也就是说单线

换句话说,没有解决方案

1 个答案:

答案 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慢得多。