shell 脚本会在 Solaris 中执行吗?如果没有,这是使其兼容的最快方法

shell 脚本会在 Solaris 中执行吗?如果没有,这是使其兼容的最快方法

我用#!/bin/sh shebang 编写了一个shell 脚本。我听说它不能与 Solaris 一起工作。我必须编写一个 korn shell 脚本。

但在其中一个线程中,有人提到可以通过简单地更改顶部的 shebang 来进行转换。这让它指向 Solaris 中 sh 所在的另一个目录。

我无法知道这是否属实,如果你能为我澄清,我会很高兴的。

这个方法行得通吗?这是最好的方法吗?

答案1

假设您的脚本是可移植的,即不使用 bashisms、GNUisms 或任何非 POSIX,它应该可以通过其#!/bin/shshebang 与大多数 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命令。

相关内容