envの出力で確認できる変数を出力できないのはなぜですか?
別のシェルインスタンスの環境変数を設定することに興味があります。だから私はいくつかの研究を行うことにしました。これについてのいくつかの質問を読んだ後、私はそれをテストすることにしました。 2つのシェルAとB(PID 420)を生成し、どちらもを実行していzshます。シェルAIから以下を実行しました。 sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach シェルBから実行するenvと、変数FOOが実際にbarの値で設定されていることがわかります。これにより、シェルBの環境でFOOが正常に初期化されたと思います。ただし、FOOを印刷しようとすると、設定されていないことを示す空の行が表示されます。私には、ここには矛盾があるように感じます。 これは私自身のArch GNU / LinuxシステムとUbuntu VMの両方でテストされました。またbash、変数がenvに表示されない場所でもテストしました。これは私には失望しますが、シェルがスポーン時にその環境のコピーをキャッシュし、それだけを使用する場合は理にかなっています(リンクされた質問の1つで提案されていました)。これはまだzsh変数を見ることができる理由には答えません。 echo $FOO空の出力はなぜですか? 編集 コメントへの入力後、もう少しテストを行うことにしました。結果は以下の表で確認できます。最初の列は、FOO変数が注入されたシェルです。最初の行には、その下に出力を表示できるコマンドが含まれています。変数FOOは次を使用して注入されました:sudo gdb -p 420 -batch -ex 'call setenv("FOO", "bar", 1)'。zsh:に固有のコマンドzsh -c '...'もbashを使用してテストされました。結果は同じであり、簡潔にするためにそれらの出力は省略されました。 Arch GNU / Linux、zsh 5.3.1、bash 4.4.12(1) | | env | grep FOO | echo $FOO …