我可以有条件的shebang吗?


7

我有一个可以使用不同的解释器运行的脚本:

#!/usr/bin/env default-interpreter
[my script]

但我想使用alternative-interpreterif if is available,如下所示:

#!/usr/bin/env alternative-interpreter
[my script]

有没有办法创建一个寻找alternative-interpreter和倒退的shebang,default-interpreter以防第一个没有?


Answers:


4

不直接,没有。最好写一个包装器Bourne shell脚本和shebang:

#!/path/to/my/wrapper

并且包装器以:

#!/bin/sh
for shell in first second third; do
    if /usr/bin/env "${shell}" "$@"; do exit $?; done
done
# We didn't find any of them.
exit 1

这让env(1)使用$ {PATH}搜索列表按照for循环中给出的顺序定位程序。


好主意。但是如果我不知道/path/to/first并且path/to/second还有什么方法可以/usr/bin/env用来重定向脚本执行呢?
marcio 2014年

如果命令存在但失败,它仍将运行第二个程序,然后运行第三个程序。
AurélienOoms2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.