その範囲はプロセスによって区別されます。

その範囲はプロセスによって区別されます。

ちょうどシェル変数の範囲について不明であるという問題が発生しました。

私はタスクを実行するbundle installために値を使用するRubyコマンドthisを使用しようとしています。$GEM_HOMEこの値を設定しましたが、図のように$GEM_HOMEコマンドは値を使用するまでその値を無視します。exportexport GEM_HOME=/some/path

私はこれが何らかの方法で変数を「グローバル」にすることを読んだ。環境変数)ところで、それがどういう意味なのか理解できません。プログラミングのグローバル変数については理解していますが、他のプログラムのグローバル変数については理解していません。

また、私が設定した変数が現在のシェルセッションにのみ適用されることを考えると、デーモンなどに対してどのように設定しますか?

シェル変数はどのような範囲を持つことができますか?

ベストアンサー1

プロセスはツリーで構成されます。各プロセスには独自の親プロセスがあります。それ以外の場合はinit常にPID1 で、親プロセスはありません。

新しいプロセスを作成するには、通常、一対のfork/execvシステムコールが必要です。ここで、サブプロセスの環境は次のとおりです。コピー親プロセスの。

シェルの変数を環境に入れるには、exportすべての子が再帰的に表示されるように変数を使用する必要があります。ただし、子プロセスが変数値を変更すると、変更された値は子プロセスとその子プロセスが生成するすべてのプロセスにのみ表示されます。後ろに変更(コピー、上記のように)。

また、子プロセスが環境を変更でき、たとえばデフォルトにリセットされる可能性があることも考慮してくださいlogin

おすすめ記事