首页 文章

make#!/ usr / bin / env python -u shebang portable [复制]

提问于
浏览
-1

这个问题在这里已有答案:

我有这个非便携式的shebang:

#!/usr/bin/env python -u

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

挑战:让这个shebang便携 changing the shebang only - 也就是说 one-liner .

换句话说,没有解决方案

1 回答

  • 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 慢得多 .

相关问题