簡體   English   中英

環境變量不會更新

[英]Environment variables does not update

我有兩個shell腳本。 在其中一個我有:

export FOO="yes"
sh another.sh &

# ops ...

export FOO=0

another.sh我有:

while [[ $FOO -eq "yes" ]]
do
# something ...
done

問題是,當第一個腳本完成后,設置FOO=0 ,值FOOanother.sh繼續為"yes" 我想知道如何獲取更新的FOO以便我可以弄清楚第一個腳本(調用者)何時完成。

子進程接收其父級環境的副本,而不是對原始環境的引用。 如果父項在子項仍在運行時更改,則子項仍在其內存空間中具有原始值。

作為一種變通方法,您可以讓父級在退出之前在已知位置創建一個空文件,並讓子級查找要創建的文件。 它不是很強大,但它是一種簡單的進程間通信形式,可能就足夠了。

這是不可能的:父級環境的更改不會傳遞給子進程。

您是否考慮過改變父母與子女的關系? 如果孩子正在等待父母完成,為什么不從子腳本中調用父腳本? 假設您的第一個腳本被稱為“first.sh”,就像是

another.sh:

sh first.sh &
CHILDPID=$!

while ! (ps -p $CHILDPID | grep $CHILDPID)
do
[...]
done

使用作業控制(在bash中使用set -m )可能是另一種解決方案。

管道'while-read'循環啟動子shell嘗試使用其他循環機制代替:

讀取fileName時......... done <<(ls -1tr $ SOURCE_DIR)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM