「echo $SHELL」と「which bash」の違い

「echo $SHELL」と「which bash」の違い

Solarisシステムでは、bashインタプリタがどこにあるかを確認しようとしましたが、少し混乱しています。私が入力したとき:

echo $SHELL

結果のパスは次のとおりです。

/bin/bash

私が入力したとき:

which bash

私は得る:

/usr/bin/bash

誰でもこの違いを説明できますか?

ベストアンサー1

システムには、異なるバージョンやシンボリックリンクなど、さまざまなbash場所にインストールされている可能性があります。bash

whichそれほど有用なコマンドではありません。ほとんどの場合、実際には移植性がないか、スクリプトで非常に便利ではありません。一般的に言えばtype比較的良いです。背後にある隠れたアイデアは、引数として提供するコマンドをwhich検索することです。PATH

$SHELL現在実行中のシェルを必ずしも反映しているわけではありません。代わりに、$SHELLユーザーが好むシェルか、通常はに設定されます/etc/passwd。ログイン後に別のシェルを起動すると、現在の$SHELLシェルと一致しなくなる可能性があります。

ご覧のとおり、$SHELL全くwhich関係ありません。これらのどれも、実際にどのシェルが実行されているかを教えてくれません。

注:残念ながら、現在実行されているシェルをファイルシステムの場所と一致させることは思ったよりも困難です。これは、バイナリを実行するためにメモリにロードされ、ほとんどのシステムで元のファイルがディスクから削除された後もメモリ内コピーが正常に実行されるためです(カーネルはディスクコピーを「地獄」エッジに残すことができます)。 「これが削除されるまで)。実際にはもう必要ありません)。私はこの問題を解決するための移植可能な方法がないと思います/proc/$$/exe。するかどうかはっきりとわかります。文書実行中(ここで$$実行されているシェルのプロセスIDは何ですか?)残念ながら、私はSolarisに慣れていないので、助けることができません。

おすすめ記事