「/bin/sh」が「/bin/bash」を指すときにシェルスクリプトを実行する

「/bin/sh」が「/bin/bash」を指すときにシェルスクリプトを実行する

私はこのコンテンツから次の内容を読みました。質問:

bash は --posix スイッチをサポートしているため、POSIX との互換性が高くなります。また、次の場合はPOSIXを模倣しようとします。shと呼ばれる

上記の引用はへの/bin/shリンクと見なされます/bin/bash

しかし、それがどういう意味なのかよく理解できません。「shに電話して」


「script.sh」という次のスクリプトがあるとしましょう。

#!/bin/bash
echo "Hello World"

次のいずれの場合も、スクリプトが通常モードまたはPOSIXモードで実行されているかどうかを教えてくださいbash(実行中の端末で次のコマンドを実行するとしますbash)。

  1. sh script.sh
  2. bash script.sh
  3. ./script.sh

それでは、「script.sh」という次のスクリプトがあるとします(上記のスクリプトと似ていますが、shebangはありません)。

echo "Hello World"

次のいずれの場合も、スクリプトが通常モードまたはPOSIXモードで実行されているかどうかを教えてくださいbash(実行中の端末で次のコマンドを実行するとしますbash)。

  1. sh script2.sh
  2. bash script2.sh
  3. ./script2.sh

ベストアンサー1

ケース1と4のみがPOSIXモードで実行されます(shbashを想定し、shの他の実装は仮定しません)。 shebangでも、どうでも構いませんが、bashWithoutへの明示的な呼び出しです。--posixwillが明示的に呼び出されるすべての状況sh。 shebang は、スクリプトに対してシェルが明示的に起動されていない場合にのみ使用されます。

ケース6、端末が実行されている場合はbashPOSIXモードで実行されていません。Bashは自分自身を使ってそれを呼び出します。端末がzshを実行している場合のケース6会議POSIXモードでも動作します。 POSIXは、この場合、正確に何が起こるのか不明です。、Bashとzshはそこで別の選択をします。 Bashは独自にスクリプトを呼び出しますが、zshはsh(何が起こっても)使用します。他のシェルもこの点で異なります。


現在どのモードにあるかを確認する簡単な方法は、スクリプト本文を作成することです。

kill -SIGHUP

これはPOSIXモードでエラーが原因で失敗するkillしかし、使用のための外部指示を提供します。これは、広範なBashバージョンに適用される単純な区別であり、発生する可能性のあるバージョンに戻ります。

おすすめ記事