shがbashへのシンボリックリンクであることがわかりました。
lrwxrwxrwx 1 root root 4 May 9 15:23 /bin/sh -> bash
理由を見つけようとしました。bashはshの実装です。shまたはPOSIXのように動作できます。したがって、#!/ bin / shを含むスクリプトはbashによって呼び出され、shの動作を模倣しようとします。 dash、cshなどのような他の実装があります。読みながらこの回答/bin/sh で呼び出すと、bash は起動ファイルを読み込み、POSIX モードに切り替えます。私はシェルの経験はあまりありませんが、この回答からわかるように、一部のシステムにはデフォルトでshがなく、bashまたは他のシェルがshに対して作業を行います。この問題について専門家の意見を聞きたいです。
- sh で呼び出すと、Bash は起動ファイルを読み込み、POSIX モードに入ります。しかし、このスタートアップファイルは何ですか?
- したがって、要点は、bashが私のシステムでshの操作を実行する場合、私のシステムにshがなく、shを持つすべてのスクリプトがbashまたはshが指す他のシェルによって呼び出されるということです。
ベストアンサー1
sh で呼び出すと、Bash は起動ファイルを読み込み、POSIX モードに入ります。しかし、このスタートアップファイルは何ですか?
スタートアップファイルは起動するかどうかによって異なりますsh
。
通常モードでは、対話型シェルとしてログインシェルの場合は最初のものです。 //
/etc/profile
ログインシェルでない場合は、そうです。~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
モード
sh
:ログインシェルの場合、/etc/profile
対話型の場合は環境変数が指すもの。特に、モードではファイルを読みません。~/.profile
$ENV
~/.bash*
sh
具体的な詳細はマニュアルを参照してください。これは些細なことではありません。6.2 Bash 起動ファイル
したがって、要点は、bashが私のシステムでshの操作を実行する場合、私のシステムにshがなく、shを持つすべてのスクリプトがbashまたはshが指す他のシェルによって呼び出されるということです。
問題が何であるか、Bashがsh操作を実行している間に他のシェルが何であるかわかりません。ただし、これに関係なく、Bashの別のコピーを/bin/sh
指すと、hashbangを使用するすべてのスクリプトとCでライブラリ呼び出しで始まるコマンドはBashを使用して実行されます。しかし、Bashはこれらの用途と完全に互換性があるため、それは重要ではありません。/bin/bash
#!/bin/sh
system()
また、csh
他のファミリに属し、POSIX shと互換性がありません。