Bash

來源 Bash 腳本,每個都有 main 函式

  • November 6, 2019

我正在使用 Bash 4.4.20。我通常在每個 bashscript 中都有 main 函式。如果我想從另一個 bash 腳本中的另一個函式獲取這個腳本,這會與兩個腳本中的主函式定義衝突嗎?

#A.sh
main() {
SomeFunction 
}

SomeFunction(){
. B.sh
}

main "$@"
#B.sh

main(){
echo Hi
}

main "$@"

有沒有不重命名主要功能的解決方案?

另一個腳本將重新定義main(),是的。儘管在這種特殊情況下,我不確定它是否重要,因為main()當腳本 B 重新定義函式時,腳本 A 正在執行。我懷疑 shell 是否允許重新定義來改變已經執行的函式的行為。

也就是說,給定這些腳本:

$ cat a.sh
main() {
   echo a1
   . ./b.sh
   echo a2
}
main "$@"

$ cat b.sh
main() {
   echo b
}
main "$@"

使用任何外殼執行我可以找到a.sh列印a1,,,ba2如果a.sh要再次呼叫main,那麼它當然會得到新的行為。

但即使在這裡無關緊要,像這樣動態地重新定義函式至少會讓人感到困惑。

更好的問題是,為什麼首先需要獲取腳本B?將 B 作為要通過原始碼載入的函式集合、各種庫,這似乎更清楚;將其作為一個獨立的實用程序,稱為正常程序,而不是來源。

在第一種情況下,A 將根據需要顯式呼叫 A 中定義的函式。

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