ちょうどシェル変数の範囲について不明であるという問題が発生しました。
私はタスクを実行するbundle install
ために値を使用するRubyコマンドthisを使用しようとしています。$GEM_HOME
この値を設定しましたが、図のように$GEM_HOME
コマンドは値を使用するまでその値を無視します。export
export GEM_HOME=/some/path
私はこれが何らかの方法で変数を「グローバル」にすることを読んだ。環境変数)ところで、それがどういう意味なのか理解できません。プログラミングのグローバル変数については理解していますが、他のプログラムのグローバル変数については理解していません。
また、私が設定した変数が現在のシェルセッションにのみ適用されることを考えると、デーモンなどに対してどのように設定しますか?
シェル変数はどのような範囲を持つことができますか?
ベストアンサー1
プロセスはツリーで構成されます。各プロセスには独自の親プロセスがあります。それ以外の場合はinit
常にPID
1 で、親プロセスはありません。
新しいプロセスを作成するには、通常、一対のfork
/execv
システムコールが必要です。ここで、サブプロセスの環境は次のとおりです。コピー親プロセスの。
シェルの変数を環境に入れるには、export
すべての子が再帰的に表示されるように変数を使用する必要があります。ただし、子プロセスが変数値を変更すると、変更された値は子プロセスとその子プロセスが生成するすべてのプロセスにのみ表示されます。後ろに変更(コピー、上記のように)。
また、子プロセスが環境を変更でき、たとえばデフォルトにリセットされる可能性があることも考慮してくださいlogin
。