行の末尾にキャリッジリターンが含まれている場合、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
。ここで^M
CR文字はここに表示されます。ファイルが存在しないため、シェルはスクリプトを実行するために指定されたインタプリタを見つけることができません。