如何使常见的shell脚本不依赖于系统

时间:2017-09-26 01:49:58

标签: shell

我有一个问题。

可以编写不依赖于ARCH和OS的shell脚本。 我想制作一个在hpUnix,linux,soalris和spark中运行的通用shell脚本。

我使用哪个shell?在我的情况下。

请帮帮我。

PS)感谢您阅读我的问题。

3 个答案:

答案 0 :(得分:0)

阅读此http://homepage.smc.edu/morgan_david/linadmin/labs/primitiveshells/primitive-shells.htm

  

虽然是计算机科学中最基本的操作系统,但是在其40多年的UNIX开发中已经分裂并分支成千种变体

     

在这个移动统一的伞下,贝壳,它们也是   各种各样和变化。您将遇到的主要外壳是:

     

源自

的Korn shell(ksh及其派生词mksh和pdksh)      AT& T营地C shell(csh及其派生的tcsh)起源   在伯克利

     

来自GNU项目的Bourne再次shell(bash),以及   其他各种努力,如

     来自普林斯顿的Z shell(zsh)   大学生,

     

和Almquist贝壳(灰)和衍生的Debian   Almquist shell(破折号)。

     

这些都是共同的基本壳,但绝不是彼此相同的,绝不是表现相同的。事实上,功能变化是各个开发分支的确切历史原因。行为差异是我们有一系列shell的原因,这就是为什么shell的行为不完全相同的原因。不要指望他们。如果命令shell的这种比较是地图,那么你可以清楚地看到它们遍布地图。命令shell类别中的程序与Web浏览器类别中的程序(如Mosaic,Opera,Safari,Firefox,Chrome)类似且不同,更为熟悉。

https://en.wikipedia.org/wiki/Comparison_of_command_shells

答案 1 :(得分:0)

因此,适用于多平台任务的正确工具将在所有方面运行,例如java。使用这样的解决方案是写一次的唯一方法。

您可以编写一个shell脚本来执行上述操作,但您很快就会想要支持每个ARCH / OS的if / else链,这需要进行更复杂的测试。

然后,您可以编写一个安装脚本来解压您的jar,并安装一个简单的脚本来调用您的复杂java。很多关于如何制作可执行jar的例子都是关于互联网的。

祝你好运。

答案 2 :(得分:0)

这个问题:

#!/bin/sh vs #!/bin/bash for maximum portability

When must I use #!/bin/bash and when #!/bin/sh?

可以为您提供更多详细信息,说明为什么首选使用#! / bin / sh的

总结一些观点:

  • 有几个shell实现了POSIX sh规范的超集。在不同的系统上, / bin / sh 可能是ash,bash,dash,ksh,zsh和c的链接。 (它总是与sh兼容 - 从不csh或fish。)

  • 只要你坚持sh功能,你就可以(甚至可能)使用#!/ bin / sh ,脚本应该可以正常运行,无论它是哪个shell是。 https://superuser.com/a/1133205/284722

  • 您应该只编写适用于shell语言的任何实现的shell脚本(包括所有"实用程序"与shell本身一起使用的程序)。这些天你可以把POSIX.1-2001(而不是-2008)作为shell和实用程序能力的权威,但要注意有一天你可能需要将脚本移植到遗留系统(例如Solaris)或者AIX)其shell和实用程序大约在1992年被冻结。https://superuser.com/a/1134898/284722

  • 最便携:使用#!/ bin / sh shebang并仅使用POSIX标准中指定的基本shell语法。这应该适用于任何POSIX / unix / linux系统。 (好吧,除了具有真正遗留Bourne shell的Solaris 10和更早版本之前,将POSIX置于不合规之前,如/ bin / sh。)https://serverfault.com/a/865880/94862