エクスポートがサブシェルに影響しないのはなぜですか?

エクスポートがサブシェルに影響しないのはなぜですか?

私が持っているなら

$ x='This is a String'
$ export x

$ xterm &
[3] 14089

子プロセスが応答しないようです。

$echo $x
$

修正する: 変数を最初にエクスポートするときにプロセス全体にあるように見えますか? -

$ export xb
[1]+  Done                    xterm
durrantm.../durrantm$ export xb
durrantm.../durrantm$ 
# Note second export didn't say anything.

答え1

子プロセスが分岐すると、親プロセスの環境をその子プロセスにエクスポートできません。子は、回転時に親の現在の環境コピーを取得する分岐シェルです。それ以来、彼らは一人でした。

フォークする前に変数を設定するので、すべての子に設定された変数を表示する必要があります。ところで、スペルエラーが発生したようです。努力するecho $x

はい

親シェルで次の操作を行います。

$ x='This is a String'
$ export x
$ xterm &
[1] 28578

xtermから:

$ echo $x
This is a String

ログインファイルで変数がリセットされますか?

まれに、失われた変数が発生したり、setunsetの環境変数が削除され、子にきちんと渡されないことがあります。次のように確認できます。

# login shell
$ bash -c -l 'echo $x'
This is a String

# interactive shell
$ bash -c -i 'echo $x'
This is a String

-xBashのスイッチを使用して、上記の出力をより冗長にすることもできます。

$ bash -x -c -i 'echo $x'

関連情報