Bash

是否可以在另一種 shell 類型中使用以 shell 風格聲明的函式

  • October 27, 2017

我有一個 bash 腳本,其中包含我們 Linux 系統的許多常用函式定義。

是否可以從其他 shell 風格(csh 和 ksh)中獲取並使用函式?

正如 Stéphane Chazelas 在評論中指出的那樣,csh相關tcsh的沒有功能,因此您無論如何都無法獲取您擁有的功能文件。

但是,類似 bourne 的 shell 經常共享語法和功能,實際上從 中bash藉用了很多功能ksh,但是這些 shell 的一些功能不兼容- Ubuntudash上的預設 shell,並且在行為上更接近原始 Bourne貝殼。

出現的另一個問題不僅與函式有關,還與函式可能呼叫的命令有關。如果您在 Ubuntu 上使用這些功能,然後突然轉到 FreeBSD,您會很快發現實用程序喜歡findps經常具有行為不同或缺失的選項。

因此,為了確保您可以使用函式,我建議您做兩件事:考慮命令及其選項的可移植性和兩個 - 編寫盡可能接近 POSIX 標準和原始 Bourne shell 語法的函式。

sudo或者,如果您有幸始終安裝您想要的 shell(如果您對正在工作的系統沒有特權,則可能不會發生這種情況),然後用一個特定的 shell 語法編寫您的函式。

請參閱何時編寫可移植腳本很重要?了解更多資訊。

一般來說,沒有。

特別是,csh(and tcsh) 的語法與 -sh派生的 shell ( sh, bash, ksh, zsh) 的語法差異太大,因此它們很可能無法理解sh腳本,反之亦然。

shell 有時可以共享函式甚至整個sh腳本,但前提是它們是為“最小公分母 shell”編寫的,通常是sh. 然而,這通常不是一個好主意。

將每個 shell 視為一種單獨的腳本語言,例如 Perl、Ruby 和 Python。不要混合它們,並且通常不要假設一個解釋器可以理解另一個解釋器的來源。

引用自:https://unix.stackexchange.com/questions/400789