我遇到了一个有趣的情况,我有一个 Python 脚本,理论上可以由具有各种环境(和路径)和各种 Linux 系统的各种用户运行。我希望这个脚本尽可能多地在没有人为限制的情况下执行。以下是一些已知的设置:
我想在所有这三个上运行相同的可执行 python 脚本。如果它首先尝试使用 /usr/bin/python2.7 会很好,如果它存在,然后回退到 /usr/bin/python2.6,然后回退到 /usr/bin/python2.5,然后如果这些都不存在,就会出错。不过,我并不太喜欢使用最新的 2.x 版本,只要它能够找到正确的解释器之一(如果存在)。
我的第一个倾向是将 shebang 行从:
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
到
#!/usr/bin/python2.[5-7]
Run Code Online (Sandbox Code Playgroud)
因为这在 bash 中工作正常。但是运行脚本会给出:
/usr/bin/python2.[5-7]: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
好的,所以我尝试以下操作,这也适用于 bash:
#!/bin/bash -c /usr/bin/python2.[5-7]
Run Code Online (Sandbox Code Playgroud)
但同样,这失败了:
/bin/bash: - : invalid option
Run Code Online (Sandbox Code Playgroud)
好的,显然我可以编写一个单独的 shell 脚本来找到正确的解释器并使用它找到的任何解释器运行 python 脚本。我只是觉得分发两个文件很麻烦,只要它在安装了最新的 python 2 解释器的情况下运行就足够了。要求人们显式调用解释器(例如,$ python2.5 …