我通常在bash中寫我的腳本。我告訴其他人在bash中運行它們,我使用#!/usr/bin/env bash
作爲shebang線。可移植shell腳本的用途是什麼?
當我閱讀關於shell腳本時,我經常發現有關不使用「bashisms」的「便攜式」解決方案的建議的評論。一個可移植的shell腳本似乎可以在任何Bourne Shell衍生程序中運行,例如。 bash,ksh或csh。
對我來說這似乎有點奇怪。爲什麼你不知道你在哪個shell中運行你的腳本?所以我的問題是:可移植shell腳本的實際用途是什麼?如果您想使用bash功能,爲什麼不簡單使用bash?
我認爲在需要可移植性時有一些常見的情況,爲什麼它會經常被提及?也許某些環境需要可移植性是出於歷史原因 - 我不知道 - 但我很想知道這些環境是什麼。
在此先感謝!
編輯:
我從你的回答和評論的結論(謝謝!):
- 您可能需要避免新的bash特性,因爲它們可能無法在所有的bash版本,一些電腦將安裝舊版本。
- 安裝程序腳本應該可以在不受控制的計算機上運行。並非所有類Unix操作系統默認都帶有bash。相反,POSIX shell幾乎可以普遍使用,因此它比bash提供更好的覆蓋範圍。
- 您可能需要在1000臺計算機上運行腳本,但不希望(或不能)在任何地方安裝bash。一個POSIX外殼可能是可用的。
- 您甚至可能無法在您喜歡的計算機上安裝bash。例如,這可能是由於缺乏管理權限,缺少平臺的bash軟件包,或缺乏「裸機」計算機等資源。再一次,POSIX shell可能是可用的。
- 在某些環境中,您不能假定shell只是一個POSIX shell,例如在System V樣式的init腳本中。 (這是正確的嗎?)
底線:你不能總是使用bash您想要的位置,但POSIX外殼很可能已經存在。
想象一下,您必須每晚在您管理的1000臺服務器上運行腳本。如果有些是舊的Solaris(例如),某些'bashisms'將會失敗。 – fedorqui
'......對這個問題的回答往往幾乎完全基於觀點,而不是事實,參考或具體的專業知識。「# – devnull
csh不是Bourne殼派生物。 –