【发布时间】:2014-06-19 15:55:58
【问题描述】:
我的问题可能看起来与 SO 问题“What Linux shell should I use?”有关,但我的问题是知道应该使用哪个 shell 来编写应用程序启动脚本,知道这是一个跨平台Java 应用程序(几乎所有 Linux 发行版、MacOS、Solaris,...)。所以我在这里添加兼容性问题。
请注意,我不是在问 “哪个是最好的外壳”(我认为这可能没有意义:主观,取决于需要),但我想知道,今天哪个 shell 最有可能在大多数操作系统上可用(并且适合 Java 应用程序启动)。
另外,我是否只需使用 shebang #!/bin/bash 来“使用 bash”? (或者例如 #!/bin/ksh 用于 Korn shell)。如果这个 shell 在这个操作系统上不可用怎么办?
我们实际上使用的是带有 shebang #!/bin/sh 的“.sh”文件(我猜是 Bourne shell),但是一些用户抱怨某些 Linux 发行版上的错误(我们还不知道他们使用的是哪一个) ,但我们希望采用更全局的方法,而不是一个一个地修复错误)。 MacOS 目前使用 bash 作为默认 shell,但目前我们在 MacOS 上使用 /bin/sh 没有任何问题...
注意:我们希望避免使用多个启动脚本(即使用不同的 shell)
【问题讨论】:
-
不要使用
#!/bin/sh。 POSIX 允许兼容的实现在那里提供一个不可移植的 shell 解释器。 -
@jlliagre 谢谢。所以如果
/bin/sh不能保证符合POSIX,应该使用哪个shebang? -
我在回复中解释了如何为特定平台获取它。
标签: linux macos shell unix compatibility