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