[英]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
,值FOO
在another.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.