我希望尽可能在AIX和Linux上使用/usr/bin/ksh93
解释器,但切换到不适用的/usr/bin/ksh
,如Mac OS X,并希望脚本在unix中普遍兼容。我不认为shebang有任何后备机制
答案 0 :(得分:2)
由于ksh
和sh
有一些共同的语法,因此您可以在开头之前添加前缀
在PATH中测试ksh或ksh93的脚本,然后重新运行脚本
正确的口译员。更换 #!用sh的路径名。 (希望
两台机器都是一样的,或者你回到了起步的地方。您可以
如果您的环境会找到适合您的路径,请继续尝试#!/usr/bin/env sh
。添加:
#!/bin/sh
if [ "$DONEIT" != true ]
then export DONEIT=true # avoid recursion
if command -v ksh > /dev/null 2>&1
then exec ksh $0 "$@"
else exec ksh93 $0 "$@"
fi
fi
... rest of your script ...
注意:command -v
是查找命令路径的POSIX方式。
(通常在这些情况下,在安装包时脚本会运行 通过#!文件并更新解释器路径到 目标机器。)
或者,您可以使用您控制的任何固定路径替换#!
行,例如#!/home/user/myksh
,并将该文件链接到正确的ksh。
答案 1 :(得分:0)
您可以制作符号链接。
if [ -f /usr/bin/ksh93 ]; then
ln -s /usr/bin/ksh93 /usr/bin/localksh
else
ln -s /usr/bin/ksh /usr/bin/localksh
fi
shebang将是#!/usr/bin/localksh
我更喜欢使用普通的shebang #!/bin/ksh
,但是当它已经存在并且版本错误时你会被卡住。