Windows行の終わりを含むファイルに関するエラーを提供するようにbashを取得するにはどうすればよいですか?

Windows行の終わりを含むファイルに関するエラーを提供するようにbashを取得するにはどうすればよいですか?

次のシェルスクリプトがあるとします。

#!/bin/bash \n
echo "Hello World" \n

実行すると

Hello world. 

ここで、次のシェルスクリプトがあるとします。

#!/bin/bash \r\n
echo "Hello world" \r\n

実行すると、次の結果が表示されます。

bad interpreter: No such file or directory

初心者の場合 - これは実際に問題の原因を指していません(原因が空白であると仮定)。あなたが本当に欲しいのは、問題が何であるかを示すエラーです。

私の質問は次のとおりですWindows行の終わりを含むファイルに関するエラーを提供するようにbashを取得するにはどうすればよいですか?

編集する:

ここでの文脈は、誰かがファイルを見て行末を見ることができず、意図せずにこのようなことが発生したということです。 UnixのテキストファイルとWindowsのテキストファイルの違いについて質問したとき、彼らは「どういう意味ですか?それはプレーンテキストですか?」と答えました。この質問は、ユーザーに問題の根本的な原因を確認するように促すことです。

ベストアンサー1

問題は、bashが実行される前にエラーが発生することです。

#!then で始まるスクリプトを実行すると、コア残りの行を調べて、ファイル名を最初の引数として使用して実行します。したがって、DOS形式のファイルがある場合、カーネルはそれを見て/bin/bash^Mプログラムとして実行しようとします。もちろん、これは存在しません。

少し狂ってみたいならできる/bin/bash^Mというプログラムを作ってみてください。

$ ls -lb /bin/bash?
-rwxr-xr-x 1 root root 61 Jun 18 22:41 /bin/bash\r

$ cat /bin/bash?
#!/bin/sh
echo Convert your program to Unix format!
exit 255

$ file foo
foo: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

$ cat -v foo
#!/bin/bash^M
echo hello^M

$ ./foo
Convert your program to Unix format!

$ dos2unix foo
dos2unix: converting file foo to Unix format ...

$ ./foo
hello

それでもこれをお勧めするかどうかはわかりません!

file代わりに、トレーニングと診断「ランチャー」(例:CRLF行終了者を報告するためのコマンド)をお勧めします。

おすすめ記事