我有这个非便携式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"被shas解析true,因为它由一个空""字符串组成,后跟"true". 由于true是一个无操作命令,它将被有效地忽略,以下行将执行 Python 解释器。
另一方面,Python 会以"""true"非常不同的方式解析该行,作为一个三引号字符串true"的开头,该字符串以下面两行开头并结束。由于该字符串不用于任何用途,Python 解释器将有效地忽略启动 Python 的 shell 片段。正是解释上的不同"""xxx",使得 Python 和sh代码可以在同一个脚本中共存。
对于一个简单的测试,附加如下内容:
import sys
print "hello!", sys.argv
给定一个合理的sh实现(并考虑到启动 Python 的时间),这不应该比使用env.