この問題はしばらくの間私を悩ませてきました。ときどき、.tcshrc ファイルに環境変数を設定しました。不要になったらすぐに、.tcshrc ファイルから削除します。ただし、何らかの理由で変数がシェルで永続的になりました。設定がコメント化または削除されると、.tcshrc ファイル内のすべてが永続的なものではないと思いました。これは特に、追加したい新しい PATH で発生しました。もう必要なくなったので、.tcshrc ファイルから削除しても何も起こりません。
2 に答える
.tcshrc は実行可能なスクリプトです。変更を有効にするには、実際に実行する必要があります。これは通常、新しいシェルを起動したときに (自動的に) 発生します。
実行している可能性のある別の問題は、環境変数が子プロセスによって継承されることです。.tcshrc が変数を上書きするのではなく、変数に追加する場合 (これは PATH では珍しいことではありません)、これが原因で表示されている動作が発生する可能性があります。現在のシェル プロセスの PATH には余分なエントリがあり、子シェルがPATH に追加していなくても (最近の .tcshrc の変更により)、既に存在しています。
.tcshrc に設定された環境変数は、そのバージョンの .tcshrc を使用したすべての tcsh シェルに影響します。ファイルを変更すると、今後開始するすべての tcsh プロセスに影響しますが、既存のプロセスには影響しません。シェルプロセスで変数が設定されると、設定を解除する唯一の方法は、「unsetenv」コマンド (または別の値を指定した「setenv」) を使用することです。
現在の tcsh プロセス (古いバージョンの .tcshrc を使用していたプロセス) の環境変数は、tcsh から呼び出したプロセスにも継承されます。
例えば:
setenv FOO BAR
.tcshrc で新しい tcsh プロセスを開始します。$FOO は "BAR" に設定されます。- 「setenv」コマンドを削除して、.tcshrc ファイルを変更します。 これは、実行中のプロセスの環境変数には影響しません。
- tcsh プロンプトから bash を起動します。bash シェル プロセスでは、$FOO が「BAR」に設定されています。これは、古い.tcshrc ファイルから取得した親プロセス (tcsh プロセス) から継承したためです。
- ログアウトして再度ログインすると、$FOO が「BAR」に設定されていたすべてのプロセスがなくなりました。新しい.tcshrcから読み取る新しい tcsh プロセスがあるため、$FOO は設定されていません。