Files
使用在一個文件中定義的變數值,在同一目錄中的文件中
在這個 GitHub 儲存庫中,我有一個名為
nwsm
. 此目錄包含nwsm.sh
包含主腳本(執行其他腳本的腳本)的文件。該目錄還包含一些其他文件,其中包含主腳本執行的子腳本,每次一個。
在
nwsm.sh
我聲明了一些變數,這些變數最終應該在所有上述下標中使用。變數擴展nwsm.sh
和下標應該以相同的方式進行,只是在它們的執行中。請注意,該目錄不包含除
nwsm.sh
及其子腳本文件之外的任何其他文件,也不應包含其他文件,在將來的任何時候。開始執行
nwsm.sh
後,下標內的變數擴展應使用 中定義的相關值進行。nwsm.sh
這是其中的主腳本
nwsm.sh
(首先是使用實用程序的變數聲明read
,然後是相鄰文件的執行):#!/bin/bash domain="$1" && test -z "$domain" && exit 2 read -sp "Please enter DB root password: " dbrootp_1 && echo read -sp "Please enter DB root password again:" dbrootp_2 && echo if [ "$dbrootp_1" != "$dbrootp_2" ]; then echo "Values unmatched" && exit 1 fi read -sp "Please enter DB user password: " dbuserp_1 && echo read -sp "Please enter DB user password again:" dbuserp_2 && echo if [ "$dbuserp_1" != "$dbuserp_2" ]; then echo "Values unmatched" && exit 1 fi "$PWD"/tests.sh "$PWD"/wp-cli.sh "$PWD"/nginx.sh "$PWD"/dbstack.sh "$PWD"/certbot.sh
我如何確保 中定義的值在執行
nwsm.sh
時可供所有對應方.nwsm
使用?
如果你的意思是你只想在主腳本執行其他腳本時讓變數可見,那麼你只需要
export
它們:$ 貓 main.sh #!/bin/sh 讀富 導出 foo ./foo.sh $貓foo.sh #!/bin/sh echo "foo 是 $foo" $ ./main.sh *廢話* 富是廢話 $
其他腳本作為主腳本的子程序執行,並且
export
ed 變數通過環境傳遞給它們。這些都不會將變數限制為特定目錄中的腳本,導出的變數對主腳本啟動的所有程序都是可見的。如果您想在不將變數傳遞給它們的情況下執行某些程序,則必須先取消導出它們export -n
。您也可以在其他腳本的開頭取消導出,以避免它們傳遞變數。另請注意,無需在主腳本(或其他腳本)的末尾清除變數或取消導出它們。變數只存在於正在執行的shell程序的記憶體中,當程序結束時,變數就消失了。
(另一方面,將變數傳遞給獨立程序需要將它們保存到文件或類似文件中。)
當然,實現幾乎相同類型的模組化的另一種方法是將程序拆分為函式,將它們儲存在單獨的文件中,並將
source
這些文件儲存在主腳本中。這樣,程序中的所有變數對所有函式都是可見的。(這可能會或可能不會更可取。)