対話型Cシェルのパス設定

対話型Cシェルのパス設定

私のデフォルトのシェル(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サイクルだけが無駄になります。代わりに必要に応じて設定してください。 (編集は分割して各ディレクトリ要素にコードを適用するなどの作業がより複雑な作業です。あえて面倒にする必要がありますか?必要に応じて設定してください。)PATHunsetenv PS1PS1unsetenv PATHsetenv PATH ...PATHPATH: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と同じ名前空間シェルの複雑さなしに何が起こっているかについての詳細は、およびマニュアルページを参照してください。exportextern char **environenviron(7)execve(2)

おすすめ記事