Files

使用在一個文件中定義的變數值,在同一目錄中的文件中

  • February 15, 2018

這個 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
*廢話*
富是廢話
$

其他腳本作為主腳本的子程序執行,並且exported 變數通過環境傳遞給它們。這些都不會將變數限制為特定目錄中的腳本,導出的變數對主腳本啟動的所有程序都是可見的。如果您想在不將變數傳遞給它們的情況下執行某些程序,則必須先取消導出它們export -n。您也可以在其他腳本的開頭取消導出,以避免它們傳遞變數。

另請注意,無需在主腳本(或其他腳本)的末尾清除變數或取消導出它們。變數只存在於正在執行的shell程序的記憶體中,當程序結束時,變數就消失了。

(另一方面,將變數傳遞給獨立程序需要將它們保存到文件或類似文件中。)


當然,實現幾乎相同類型的模組化的另一種方法是將程序拆分為函式,將它們儲存在單獨的文件中,並將source這些文件儲存在主腳本中。這樣,程序中的所有變數對所有函式都是可見的。(這可能會或可能不會更可取。)

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