対話型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)

答え2

これらのパスのインポートを停止する方法はありますか?

編集中.cshrcまたは.tcshrc何でも許可することをお勧めします。環境変数望ましくない、または値を変更したいオブジェクトが渡されました。tcsh。その後、設定を解除するか、値を編集してください。それだけです。thrigの素晴らしい答え実施方法について説明しました。

しかし、あなたはできる必要に応じて正確に実行してください。tcsh不要な環境変数なしで実行するか、別の値を指定してください。

tcshあなたが脱出した場合ボーンスタイルシェル良いbashそれからVAR=valコマンドの直前に書くことができます。このコマンドの環境変数を設定します。たとえば、

PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

これはいいえ別のコマンドで割り当てを実行するのと同じです(後に改行文字または文字を追加して;)。これにより、変数が環境にエクスポートされなくなります。サブプロセス同様に、tcsh次のコマンドの実行が完了しても割り当ては維持されます。

次の方法で複数の環境変数を設定することもできます。

BAR=barval PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

以下で実行される後続のコマンドでは、環境変数は変更されていませんbash

ek@Io:~$ echo "$LANG"
en_US.UTF-8
ek@Io:~$ LANG=C tcsh -c 'echo "$LANG"'
C
ek@Io:~$ echo "$LANG"
en_US.UTF-8

同様に、環境変数に空の文字列を割り当てることができます。

FOO= tcsh

ただし、これは環境から変数を完全に削除するのとは異なります。これには、次のものを使用できます。envオプション付きコマンド-u

env -u FOO tcsh

あなたもできます置く環境変数env:

env PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

君は普通そうじゃない必要ただし、構文がサポートされているため、bashこれは不可能です。bashVAR=val

env単一のコマンドで複数の環境変数を設定し、変数を設定解除することもできます。つまり、あなたがそうすることを意味しますいいえリンクenvコマンドが必要です。たとえば、次のように使用できます。

env -u FOO BAR=barval PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

実際のコマンドenv実行は、シンボルを含まない最初の非オプション引数で始まります=

関連情報