我有这个非便携式的shebang:
#!/usr/bin/env python -u
Run Code Online (Sandbox Code Playgroud)
它不可移植,因为python -u它作为一个单独的arg馈送到env我的系统上.
挑战:让这个shebang便携式只改变shebang - 也就是说一个单线.
换句话说,没有解决方案
use*_*342 11
我使用以下内容:
#!/bin/sh
"""true"
exec python -u "$0" "$@"
"""
# python code goes here
Run Code Online (Sandbox Code Playgroud)
该行将"""true"被shas 解析true,因为它由一个空""字符串后跟"true".由于true是一个无操作命令,它将被有效地忽略,并且以下行将执行Python解释器.
另一方面,Python将以"""true"非常不同的方式解析该行,因为打开了一个三重引号的字符串,该字符串以true"下面两行开头并关闭.由于字符串不用于任何东西,Python解释器将有效地忽略启动Python的shell片段.解释的不同之处"""xxx"在于允许Python和sh代码在同一个脚本中共存.
对于简单的测试,请添加如下内容:
import sys
print "hello!", sys.argv
Run Code Online (Sandbox Code Playgroud)
鉴于合理的sh实现(并考虑到启动Python的时间),这应该不比使用慢得多env.
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |