すべてのサブシェルで使用可能および変更できるように環境変数をエクスポートしますか?

すべてのサブシェルで使用可能および変更できるように環境変数をエクスポートしますか?

私が持っていると仮定しましょう

export MY_VAR=0

存在する~/.bashrc

GNOME端末が開いていて、この端末で$MY_VAR値を200

echo $MY_VAR

この端末で200表示します。

これで、GNOME端末で別のタブを開いて実行しました。

echo $MY_VAR

...代わりに200私は持っています0

端末が環境変数を変更するときに、この修正(200に設定)がすべての後続のサブシェルなどで使用できるように200値を維持するにはどうすればよいですか?可能ですか?

ベストアンサー1

コピー環境はサブシェルに伝播されるため、次のように動作します。

$ export MY_VAR=200
$ bash
$ echo $MY_VAR
200

ただし、コピーなので、その値を親シェルに渡すことはできません。少なくとも環境を変更する方法では不可能です。

実際には、さらに一歩進んで、Gnome端末の新しいタブなど、親シェルとは別に実行される「兄弟」シェルが共有するグローバル変数のようなものを作成したいようです。

ほとんどの場合、答えは「環境変数がそのように動作しないためできません」です。しかし、別の答えがあります。つまり、いつでも何かをハッキングできるということです。 1つの方法は、変数の値をファイル(たとえば)に書き込ん~/.myvarだ後にそれを含めることです~/.bashrcスタートそのファイルから読み取った値。

さらに一歩進むことができます。~/.myvarformatを使用しMYVAR=200てからsetを使用するPROMPT_COMMAND=source ~/.myvarと、新しいプロンプトが表示されるたびに値が再度読み取られます。まだではないかなり共有グローバル変数ですが、実際のように動作し始めます。ただし、プロンプトが返されるまでアクティブではなく、これを実行する操作によっては深刻な制限が発生する可能性があります。

そしてもちろん、次の作業は自動的に行われます。書く環境変数は実際にはシェル間の通信メカニズムで~/.myvarはなく、他の方法を見つける方が良いので、ここで停止します。

おすすめ記事