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に慣れていないので、助けることができません。