![shell 脚本会在 Solaris 中执行吗?如果没有,这是使其兼容的最快方法](https://linux22.com/image/58106/shell%20%E8%84%9A%E6%9C%AC%E4%BC%9A%E5%9C%A8%20Solaris%20%E4%B8%AD%E6%89%A7%E8%A1%8C%E5%90%97%EF%BC%9F%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%EF%BC%8C%E8%BF%99%E6%98%AF%E4%BD%BF%E5%85%B6%E5%85%BC%E5%AE%B9%E7%9A%84%E6%9C%80%E5%BF%AB%E6%96%B9%E6%B3%95.png)
我用#!/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
命令。