次の2つのファイルを確認してください。
私の考えはまったく同じようですが、ファイル1のサイズは41バイト、ファイル2のサイズは44バイトです。
今、3つの追加文字は気にしません。しかし、これらの文字も奇妙なエラーを引き起こすと思います。このファイルを複製して実行すると、ファイル1は正常に実行されますが、ファイル2は行3でエラーを返します。 ./BasicCheck.sh: 行 3: cd: case0: そのファイルやディレクトリはありません。
それでは、この追加文字は何ですか?なぜエラーが発生するのですか?これらのエラーを修正するにはどうすればよいですか?
私の考えでは、彼らは改行されます。おそらく、ファイル1にはLinuxベースの改行があり、ファイル2にはWindowsベースの改行があります。そうなんですか?なぜそのようなエラーが発生するのですか?
答え1
このfile
コマンドは問題を指摘しています。
% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
2番目のスクリプトは「DOS」形式です。したがって、期待どおりに動作しません。今に変換すると、dos2unix
結果は同じです
% dos2unix file2
dos2unix: converting file file2 to Unix format ...
% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2
UnixコマンドでDOSフォーマットファイルを使用しようとすると、各行の最後にcontrol-Mが付けられます。だから、次の行
a=b
trueをa
bに設定し、control-Mを使用して簡単に設定します^M
。
a=b^M
すべてのコマンドは同様に影響を受けます。たとえば、2つの文字コマンドを含む単純な行は、存在しない3ls
文字のコマンドを実行しようとします。ls<control-M>