-1

我有这个非便携式shebang:

#!/usr/bin/env python -u

它是不可移植的,因为在我的系统上python -u作为一个单独的参数提供。env

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

换句话说,没有解决方案

4

1 回答 1

10

我会使用以下内容:

#!/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.

于 2013-10-10T19:15:19.200 回答