シェルスクリプト – 新しいスクリプトは `exec` 以降の親スクリプトから値を継承しません。

シェルスクリプト – 新しいスクリプトは `exec` 以降の親スクリプトから値を継承しません。

私は次のようなシェルスクリプトを書きましたtestmain.sh

username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

そしてprocess.sh

echo "In subprocess the process ID is:"
echo $$
echo $username

で実行しています./testmain.sh

メインプロセス()とサブプロセス()が同じプロセスIDを共有するため、「ravi」を$username印刷する必要があると予想しました。しかし。process.shtestmain.shprocess.shprocess.sh

シェルはなぜこのように動作しますか?私は何が間違っていましたか?

ベストアンサー1

exec外部コマンド(dコマンドを含む)の環境に変数を渡すには、変数をエクスポートする必要があります。それ以外の場合は、sourceスクリプトを読む必要があります。

したがって、次のいずれかを実行します。

export username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

または:

username="ravi"
echo "The main ProcessId: "
echo $$
. ./process.sh  # source the script

execこれは、環境変数が継承されている間(通常はコマンドを実行するときと同じように)、エクスポートされていない変数が環境に追加されないためです。

おすすめ記事