私のデフォルトのシェル(Ubuntu)はbashです。ただし、特定のプログラムではCシェルに変更する必要があります。これを行うために.cshrcファイルを設定しましたが、インタラクティブにCシェルに変更すると(この場合はtcshコマンドを使用)、すべてのbashパスを取得することがわかります。
一部のパスが実行する必要があるプログラムと互換性がないため、これらのパスのインポートを停止する方法はありますか?つまり、Cシェル環境にいるときに必要なすべてを.cshrcファイルに定義して制御できるようにしたいと思います。しかし、ログインシェルを永久に変更したくありません。
ベストアンサー1
環境変数は常に親プロセスから継承されるため、[†]不要.cshrc
な環境変数は手動で設定または削除する必要があります。
setenv PATH /bin:/other/dirs/here:/and/more
unsetenv PS1
これは相互排他的な作業です(残念ながら、英語「or」にはブール特異性がありません)。環境変数をsetenv PATH
設定し、不要な環境を削除します。これを行うと、CPUサイクルだけが無駄になります。代わりに必要に応じて設定してください。 (編集は分割して各ディレクトリ要素にコードを適用するなどの作業がより複雑な作業です。あえて面倒にする必要がありますか?必要に応じて設定してください。)PATH
unsetenv PS1
PS1
unsetenv PATH
setenv PATH ...
PATH
PATH
:
PATH
または、env -i csh
完全に空の環境を使用できます。この場合、.cshrc
必要なすべての項目を設定することをお勧めします(さまざまなデフォルトの環境変数は、に設定またはlogin(1)
等しく設定されますHOME
)。
$ env perl -E 'say $ENV{SHELL}'
/opt/local/bin/mksh
$ env -i perl -E 'say $ENV{SHELL}'
$
[†] Bourneシェルは)を使用してvia Complexを介して子プロセスに渡される変数を表示することで、シェル専用変数を配置した残りの変数PS1
と同じ名前空間シェルの複雑さなしに何が起こっているかについての詳細は、およびマニュアルページを参照してください。export
extern char **environ
environ(7)
execve(2)