我用#!/bin/sh shebang 编写了一个shell 脚本。我听说它不能与 Solaris 一起工作。我必须编写一个 korn shell 脚本。
但在其中一个线程中,有人提到可以通过简单地更改顶部的 shebang 来进行转换。这让它指向 Solaris 中 sh 所在的另一个目录。
我无法知道这是否属实,如果你能为我澄清,我会很高兴的。
这个方法行得通吗?这是最好的方法吗?
答案1
假设您的脚本是可移植的,即不使用 bashisms、GNUisms 或任何非 POSIX,它应该可以通过其#!/bin/sh
shebang 与大多数 Unix 和 Linux 操作系统一起工作。
然而,在 Solaris 10 及更早版本中,/bin/sh
不是 POSIX shell,而是旧版 Bourne shell,它早于 POSIX,并且缺少后来随标准提供的功能。
如果保持原样,您的脚本可能会中断,但是可以通过将 shebang 设置为指向符合 POSIX 的 Solaris shell 来轻松修复此问题:
#!/usr/xpg4/bin/sh
为了确保您在与默认 Solaris 实用程序不同时也选择符合 POSIX 的实用程序,您还应该在脚本的早期添加以下行:
PATH=$(getconf PATH):PATH
答案2
是的你是对的。
在Solaris和Linux中,情况有所不同,因此如果我们需要编写单个脚本,那么我们可以使用这种方式。
#!/usr/bin/env sh
< Your Code>
这会起作用。
在Linux中。
$which sh
/bin/sh
在索拉里斯。
$which sh
/usr/bin/sh
为了避免在单个脚本中出现此路径,我们可以使用env
命令。