2017-09-26 60 views
0

我有一個問題。如何使普通shell腳本不依賴於系統

可以編寫不依賴於ARCH和OS的shell腳本。 我想製作在hpUnix,linux,soalris和spark中工作的通用shell腳本。

我使用哪個外殼?在我的情況。

請幫幫我。 PS)謝謝你閱讀我的問題。

+0

什麼'dash'工作,最有可能將在其他_Bourne-工作ish_ shells:它的創建目的是具有絕對最小的功能。 –

回答

0

閱讀本http://homepage.smc.edu/morgan_david/linadmin/labs/primitiveshells/primitive-shells.htm

雖然最根本的操作系統在計算機科學,UNIX的發展超過了40年分裂和支成無數的變化

這項綜合移Unix系統的謊言炮彈,他們也都是各種各樣的和變化的。你會遇到的主要殼是:

Korn外殼(KSH及其衍生物mksh和pdksh程序)從

所述AT &Ť營詞幹C外殼(CSH和其衍生物的tcsh)伯克利

始發

的是Bourne Again Shell的GNU從項目(慶典),以及 其他各種努力像

觀點,Z shell(zsh中)從普林斯頓 大學的學生,

和Almquist外殼(灰)和派生Debian Almquist外殼(破折號)。

這些都是基本的殼體,但是它們並不相同,也決不相同。事實上,功能變化是各個開發部門確切的歷史原因。行爲差異就是爲什麼我們有一系列的殼,這就是殼的行爲不完全相同的原因。不要指望他們。如果這個命令shell的比較是地圖,那麼你可以清楚地看到它們全都在地圖上。命令shell類別中的程序與Mosaic,Opera,Safari,Firefox,Chrome等Web瀏覽器類別中的程序類似,但更爲熟悉。

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

0

因此,對於多平臺任務的合適的工具是什麼,將運行上都是一樣的,像Java。使用這種解決方案是編寫一次的唯一方法。

您可以編寫一個shell腳本來完成上述操作,但是您將很快爲每個您想要支持的ARCH/OS提供if/else鏈,這需要進一步和更復雜的測試。

然後,您可以編寫一個安裝腳本來解壓縮jar,並安裝一個簡單的腳本來調用您的複雜java。如何製作一個可執行的jar的例子大多是關於互聯網的。

祝你好運。

0

這個問題:

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

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

可以給你,爲什麼最好使用#更多詳情!/bin/sh的

總結一些要點:

  • 有其實現的POSIX規範SH的超集數枚炮彈。在不同的系統上,/bin/sh可能會鏈接到ash,bash,dash,ksh,zsh,& c。 (這將永遠是兼容sh雖然 - 從未csh或魚。)

  • 只要你堅持SH纔有的功能,你可以(甚至可能應該)使用#/ bin/sh的和!腳本應該可以正常工作,不管它是哪個shell。 https://superuser.com/a/1133205/284722

  • 您應該只編寫可與shell語言的任何實現一起工作的shell腳本(包括所有與shell本身配合使用的「實用程序」程序)。現在您可以將POSIX.1-2001(不是-2008)作爲shell和公用程序能夠使用的權威,但請注意,有一天您可能會被要求將腳本移植到舊系統(例如Solaris或AIX),其外殼和實用程序被凍結大約1992 https://superuser.com/a/1134898/284722

  • 大多數便攜式:使用#/ bin/sh的家當,只使用在POSIX標準中規定的基本shell語法!這應該適用於任何POSIX/unix/linux系統。 (嗯,除了Solaris 10和早些時候有真正的遺產Bourne shell中,早於POSIX所以不符合要求的,如/ bin/sh的。)https://serverfault.com/a/865880/94862