是否可以在另一種 shell 類型中使用以 shell 風格聲明的函式
我有一個 bash 腳本,其中包含我們 Linux 系統的許多常用函式定義。
是否可以從其他 shell 風格(csh 和 ksh)中獲取並使用函式?
正如 Stéphane Chazelas 在評論中指出的那樣,
csh
相關tcsh
的沒有功能,因此您無論如何都無法獲取您擁有的功能文件。但是,類似 bourne 的 shell 經常共享語法和功能,實際上從 中
bash
藉用了很多功能ksh
,但是這些 shell 的一些功能不兼容- Ubuntudash
上的預設 shell,並且在行為上更接近原始 Bourne貝殼。出現的另一個問題不僅與函式有關,還與函式可能呼叫的命令有關。如果您在 Ubuntu 上使用這些功能,然後突然轉到 FreeBSD,您會很快發現實用程序喜歡
find
或ps
經常具有行為不同或缺失的選項。因此,為了確保您可以使用函式,我建議您做兩件事:考慮命令及其選項的可移植性和兩個 - 編寫盡可能接近 POSIX 標準和原始 Bourne shell 語法的函式。
sudo
或者,如果您有幸始終安裝您想要的 shell(如果您對正在工作的系統沒有特權,則可能不會發生這種情況),然後用一個特定的 shell 語法編寫您的函式。請參閱何時編寫可移植腳本很重要?了解更多資訊。
一般來說,沒有。
特別是,
csh
(andtcsh
) 的語法與 -sh
派生的 shell (sh
,bash
,ksh
,zsh
) 的語法差異太大,因此它們很可能無法理解sh
腳本,反之亦然。shell 有時可以共享函式甚至整個
sh
腳本,但前提是它們是為“最小公分母 shell”編寫的,通常是sh
. 然而,這通常不是一個好主意。將每個 shell 視為一種單獨的腳本語言,例如 Perl、Ruby 和 Python。不要混合它們,並且通常不要假設一個解釋器可以理解另一個解釋器的來源。