OS 基于 shebang

OS based shebang

我有很多用 Solaris 编写的脚本,它们使用像这样的 shebangs:

/usr/bin/sh
/usr/bin/ksh  

我正在将代码移植到 Linux,其中解释器位于 /bin

有什么方法可以修改 shebang 以便脚本在 SolarisLinux 中都可以工作

我希望我们不能像下面那样对 shebang 进行 OS 检查:

if [ $os == "Linux" ]
then
    #!/bin/sh
else
    #!/usr/bin/sh
fi  

在 Linux 中添加链接是否可以,如下所示:

/usr/bin/sh --> /bin/sh

您不能按照您想要的方式执行选择性 shell,即 if - then 构造不适用于 shell 指令第一个行。

您提到的最佳方法是创建指向现有 shell 的符号链接。或者,您需要遍历每个脚本并仅在脚本的第一行将“/usr/sbin”字符串替换为“/bin”(如果第一行以“#!”开头)。编写一段代码来遍历所有脚本并修改 shell 指令应该不会太难。

在 Solaris 中,/bin 链接到 /usr/bin。因此 shebang 可以更改为 /bin/ksh 以在 OS

中工作