Bashシェルスクリプトから環境変数の最新の値を取得する方法を知りたいです。私が経験している問題は、外部から何度も変更できる環境変数があることです。ただし、シェルスクリプトでこの変数を使用すると、起動時に常に値が表示されます。たとえば、シェルスクリプトを作成しましたが、環境変数xは10です。
echo $x #Here this prints 10
sleep 20 #here during the sleep I am changing the value to 5
echo $x #Here even after value is changed to 5 , it prints 10.
実際の実行は次のとおりです。
# ./temp.sh &
[1] 915
# 10
# export x=5
# 10
[1]+ Done ./temp.sh
#
答え1
環境変数は、このようなタスクを実行するためのものではありません。スクリプトは、一度実行すると、環境をコピーに継承します。その後、両方の環境は独立しています。
プロセス間の通信方法を見つける必要があるかもしれません。本当に変数でこれを行う必要がある場合は、次の点を確認してください。これ;これは通常の使用で実行されているプロセスと通信する正しい方法ではありませんが。
答え2
環境変数はプロセスごとに異なります。プロセスが開始されると、環境のコピー(開始プロセスによって構築されたもの)がインポートされ、一度起動すると、他のプロセスはそのコピーに触れることができません。
あなたの例で値を変更すると、x
実行中のシェル内で変更されます。変数をエクスポートすると、後でシェルが起動するプロセス環境にその変数をコピーするようにシェルに通知できますが、すでに開始されているプロセスの変数値には影響しません。したがって、実行中の独自のシェルがあり、起動時に値を選択しtemp.sh
ますが、使用している対話型シェルで行われた後続の変更は、実行中のシェルには表示されません。x
x
temp.sh
(厳密に言えば、root
実行中のプロセスの環境を変更することは可能ですが、これはこの回答の範囲外です。)