Bashがキャリッジリターンを持つスクリプトを実行しないのはなぜですか?

Bashがキャリッジリターンを持つスクリプトを実行しないのはなぜですか?

行の末尾にキャリッジリターンが含まれている場合、bashはスクリプトの実行を拒否することがわかりました。これを観察するには、ファイルを作成してくださいhello.sh

#!/bin/bash

echo hello

次に、実行権限を付与します。

chmod 700 hello.sh

そして実行してください./hello.sh。完璧に動作します!

今これを試してみてください:

unix2dos hello.sh
./hello.sh

私は得る:

bash: ./hello.sh: cannot execute: required file not found

スクリプトを実行できないのはなぜですか?

答え1

良いか悪いかは、キャリッジリターンはファイル名に有効な文字です。実際、シェルは実行を試みるのではなく、/bin/bash実行を試みています/bin/bash^M。ここで^MCR文字はここに表示されます。ファイルが存在しないため、シェルはスクリプトを実行するために指定されたインタプリタを見つけることができません。

関連情報