爲什麼這項工作:爲什麼你在Bash函數而不是在腳本本身設置環境變量
# a.sh
setEnv() {
export TEST_A='Set'
}
時,這並不:
# b.sh
export TEST_B='Set'
例:
> source a.sh
> setEnv
> env | grep TEST_A
TEST_A=Set
> b.sh
> env | grep TEST_B
我明白爲什麼運行腳本不起作用以及如何使它工作(source b.sh
等),但我很好奇爲什麼t他功能正常。 這是在OS X上,如果有關係。
當您運行腳本時,它會創建一個子shell,並且該變量將在其中定義,但不在父級中。函數調用仍在當前shell中。你也可以'源'另一個腳本。 – karakfa
對稱處理腳本,它可以工作。 'source b.sh'後跟'env | grep TEST_B'會很好。如果你沒有輸入'a.sh',你就沒有這個函數可以運行。這都是關於子shell(運行'b.sh'創建一個新的shell來獲取它的環境設置),而不是(使用'source'不會創建一個新的shell)。 –