web-dev-qa-db-ja.com

システムプロパティウィンドウで設定されたcygwinシェル環境変数を更新するにはどうすればよいですか?

[システムのプロパティ]ウィンドウに移動し、環境変数をパスに追加するとします。ターミナルウィンドウを開いていると、変更に気付かないので、閉じて別のウィンドウを開きます。

コマンドラインからパス情報を再読み込みする方法はありますか?特にCygwinShellでそれを行う方法を知りたいのですが、どちらの場合(Cygwinまたはネイティブターミナル)を処理する方法を知っていれば幸いです。

6
Eric Wilson

変更を子プロセスに自動的に伝播する組み込みメソッドはありません。プロセスは特定のメッセージをリッスンして更新するように設定できますが、そのためにはアプリケーション内で特別な処理が必要です。

一部のアプリケーションへの環境の伝播は、規則ではなく例外です。通常の動作では、プロセスが作成されると、親プロセスから環境のコピーを取得します。そのプロセス内の環境への変更は、親に伝播されません。プロセスが作成された後、親の環境のそれ以上の変更は子に伝播されません。

Windows環境では、そのインターフェイスを介して設定したシステム変数は レジストリ に格納されるため、理論的には、レジストリを再読み取りして現在の変数を出力するスクリプトをcygwinで記述してから、これを使用して、現在のシェルの環境を更新します。

Kbから http://support.Microsoft.com/kb/104011

ただし、環境変数を変更してもすぐには変更されないことに注意してください。たとえば、変更を加えた後に別のコマンドプロンプトを開始すると、環境変数は以前の(現在ではない)値を反映します。ログオフしてから再度ログオンするまで、変更は有効になりません。

ログオフせずにこれらの変更を有効にするには、システム内のすべてのウィンドウにWM_SETTINGCHANGEメッセージをブロードキャストして、関心のあるアプリケーション(Windowsエクスプローラー、プログラムマネージャー、タスクマネージャー、コントロールパネルなど)が更新を実行できるようにします。

4
Zoredache

Windowsコンソールでは、cmdと入力してEnterキーを押すだけです。これにより、技術的には他のセッション内の新しいセッションに移動しますが、新しい環境変数が含まれます。含まれないのは、外部セッションからのセッション情報です。つまり、環境変数やコマンド履歴などです。

1
EBGreen