我正在使用一系列命令行来在 Linux 系统上创建文件、设置变量等。 我无法判断执行期间实际使用哪个 shell,但我知道它将是 csh、tcsh、sh、ksh 或 bash 之一。
csh 和 tcsh 不兼容 bourne 是我目前的主要问题,因为它们使用不同的命令/语法来设置变量和条件表达式。
如果可以安全地假设它存在,我可以简单地创建一个带有 shebang 的 shell 脚本来切换到/bin/sh。
因此我想知道:假设 sh 已安装并可用是否安全,或者是否有另一种更优雅的方式来处理不同的 shell 样式而无需创建单独的脚本?
最佳答案
可以安全地假设 POSIX 兼容系统中存在 sh
,但其路径可能会有所不同。 Open Group 规范规定要通过以下方式确定标准 sh 实用程序的位置:
command -v sh
所以你可以这样做:
"`command -v sh`" <<EOS
echo my super sh script
EOS
但是有一个问题:csh 不支持引用此处的文档,这将使编写脚本的过程变得非常痛苦。
由于您的目标是 Linux,因此您可以直接编写 sh
脚本并使用 shebang #!/bin/sh
或 #!/usr/bin/env sh
.
请注意,父 shell 无法使用脚本中设置的变量。为此,您需要source
脚本,在这种情况下,语法很重要,您必须至少编写sh
和csh
它的版本。
关于linux - 可以安全地假设 sh 已安装吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70591439/