Bash の予期しないトークン付近の構文エラー

Muhammad Husnain 2023年6月20日
Bash の予期しないトークン付近の構文エラー

この記事では、Bash スクリプトの非表示文字が原因で発生する予期しないトークン構文エラーを特定して修正する方法を示します。

Bash の予期しないトークン付近の構文エラー

構文的には問題ないように見える Bash スクリプトが機能しない場合があります。 あいまいな 構文エラー が表示されますが、これも役に立ちません。

次のようなコードがあるとします。

#!/bin/bash
while :
do
echo "This will repeat every second until you press CTRL + C"
sleep 1
done

構文的には、上記のコードは正しいです。 ただし、一部の非表示文字により、Linux でコードが構文的に判読不能になる場合があります。

見えない文字が問題を引き起こしているかどうかをどのように確認できますか? どうすればそれを解決できますか?

前のセクションで説明したように、ソリューションは簡単です。

問題を特定する

filename.sh が Bash スクリプト用に保存したファイルであるとします。

ターミナルを開き、ファイルの場所に移動します。 次に、ターミナルで次のコマンドを実行します。

cat -v filename.sh

キャリッジ リターンまたは改行なしスペースを表す可能性が高い非表示の文字は、^MM-BM-、または M- として表示する必要があります。 他の奇妙な文字がファイルに入った場合は、それらも表示できるはずです。

この場合の問題を解決するには、いくつかのオプションがあります。

コンソール コマンドを使用して Windows の改行を削除する

filename.sh という名前の問題のあるファイルがある場合は、次のコマンドを使用して、修正された内容を correctedFile.sh という名前のファイルに保存できます。

tr -d '\r' < filename.sh > correctedFile.sh

UNIX 以外のファイルを UNIX に適した形式に自動的に変換する

これには、dos2unix というユーティリティが必要です。 apt をパッケージ マネージャーとして使用している場合は、次のコマンドを使用して dos2unix をインストールできます。

sudo apt install dos2unix

または、arch ベースのディストリビューションを使用している場合は、AUR から dos2unix をインストールできます。

ファイルを UNIX 対応の形式に変換するには、ターミナルを開き、目的のファイルが含まれているフォルダーに移動します。 filename.sh というファイルを検討します。

ターミナルで次のコマンドを入力します。

dos2unix filename.sh

上記のコマンドは、ファイルを UNIX に適した形式に変換します。 したがって、問題を解決します。

うまくいけば、あなたの Bash スクリプトは問題なく動作します。 それでも実行されない場合は、実際に構文の問題が発生している可能性があります。

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

関連記事 - Bash Error