シェル変数をシステム内のすべてのセッション(現在のセッションだけでなく)にエクスポートする方法があることを知りたいです。シェル変数は動的なものであり、時々変化するため、.bashrcファイルに設定するつもりはありません。
3 に答える
で DEBUG にトラップを設定することにより、ディスク上のファイルを再読み取りし続けるようにセッションを設定できます.bashrc
。
trap 'source ~/.myvars' DEBUG
ターミナル A を開いたままにし、ターミナル B で実行echo VAR=42 >> ~/.myvars
してから、ターミナル A に戻すとecho $VAR
、「魔法のように」設定されます。
あなたは何をするのか誤解しているようですexport
。ローカル変数をプロセス内の環境ブロックに移動するだけです ( /proc/$$/environ
)。
新しいプロセスが作成されると (a fork
)、環境ブロックを含むプログラム データ領域が新しいプロセスにコピーされます (実際には、最初は共有され、書き込み時にコピーされます)。別のプログラムが実行されると (execve)、デフォルトでは、環境ブロックは前のプログラムから残ります。env(1)
プログラムもご覧ください。
したがって、環境変数は通常、親プロセスから継承 (コピー) されます。実行中のプロセスに新しい環境変数を取得する唯一の方法は、デバッガーが行うように、ある種の接種技術を使用することです。このようなプログラムを作成するのは簡単なことではなく、セキュリティへの影響を想像できると思います。
できません。より良い説明は、ここの UNIX スタック交換セクションにあります!
シェル変数は、達成しようとしている用途にはおそらく適していません。代わりにファイルを使用したいかもしれません。