Bash
來源 Bash 腳本,每個都有 main 函式
我正在使用 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
,,,b
。a2
如果a.sh
要再次呼叫main
,那麼它當然會得到新的行為。但即使在這裡無關緊要,像這樣動態地重新定義函式至少會讓人感到困惑。
更好的問題是,為什麼首先需要獲取腳本B?將 B 作為要通過原始碼載入的函式集合、各種庫,這似乎更清楚;或將其作為一個獨立的實用程序,稱為正常程序,而不是來源。
在第一種情況下,A 將根據需要顯式呼叫 A 中定義的函式。