2015-04-03 37 views
1

許多shell開發人員花費很多精力開發可移植代碼,避免例如Bashisms,並且我想知道這種增加的努力是否真的有助於符合軟件需求。清單:何時編寫符合可移植性/符合POSIX標準的shell代碼?

我想知道是否可以給出一個簡單的需要便攜式代碼的條件清單。讓我們假設

  • ,使用替代$BETTER_LANGUAGE外殼實際上是有意義的,
  • 每個殼對所有目標系統的版本相同(即外殼的版本差異不便攜的一部分),
  • 標籤的可讀性/可變性目前尚未考慮(便攜式代碼可能比例如最新的Bash RegEx功能更易於閱讀/理解)。

這是已經到了我的腦海裏至今:

  • 代碼實際上是(或可能在未來),並有意在不同的殼(執行例如,因爲目標平臺被限制在不同的殼,或者因爲代碼將來可能需要在更快的shell中執行,比如dash),並且提供不同的實現方式是不可行的。
  • 代碼是一個框架的一部分,旨在爲便攜式本身
  • 代碼是源包,必須在各種平臺可建的部分
  • 軟件分發作爲一個包,適用於各種目標系統並且開發人員不想引入對特定外殼的依賴關係

是否有任何我沒有想到的明顯條件,或者它們可能會更普遍地表達? POSIX合規性是否需要與普通可移植性不同的清單?是否有任何文獻或其他來源可以推薦?

回答

1

我想知道這種增加的努力是否真的有助於符合軟件要求。

這個 - 「這增加的努力」 - 表明選擇shell作爲編程語言首先是錯誤的。 Shell是管道的語言:你不需要在其中實現工具 - 你可以用它來控制其他工具。如果shell腳本需要很長時間才能開發,如果遇到POSIX shell的限制,那麼shell很可能是錯誤的語言。

唯一的例外是,你的清單中缺少的東西就是裸機的環境,就像剛剛安裝的商用UNIX系統(可能是一些* BSD系統)一樣。如果您爲這些系統開發軟件,那麼您可能必須使用POSIX shell,因爲系統上可能沒有其他字面意思(如字面意義上的「沒有字面意思」)。

最後,所有軟件都附帶了依賴項和先決條件列表。如果你包含bash作爲依賴關係,那麼它就不會打擾* NIX admin:bash通常是第一個安裝在這類系統上的第三方軟件包。另外,與其他第三方軟件相比,bash(作爲其他流行的shell,例如cshtcsh,ksh)實際上沒有安裝和依賴性問題。

POSIX合規性是否需要與一般可移植性不同的清單?

沒有「通用便攜性」這樣的東西。便攜性始終是,特別是

軟件可移植性(廣義上定義)是軟件在兩個或更多不同操作系統上運行的能力。 POSIX是一個操作系統標準,爲用戶和軟件開發人員定義了一部分操作系統接口。它是一個平臺基礎,而不是它自己的平臺。

POSIX合規性要求我只在一些利基市場中見過。通常因爲唯一的原因,它是唯一的操作系統ISO標準。

對於沒有「POSIX合規性」硬性要求的軟件,一般建議針對特定平臺。常見的分母可能仍然是POSIX標準,但操作系統特定的功能,定製和處理只是使軟件更適合特定平臺的用戶。

最後,用戶不關心POSIX。 POSIX是開發人員的工具。開發人員使用它來降低開發和維護多平臺軟件的成本。因此,來自用戶的需求是特定平臺的支持,而不是「POSIX合規性」。