修正:予期しないトークン `( 'の近くの構文エラー
予期しないトークン `( 'に近いエラーメッセージ構文エラーは、Unixタイプの環境、Cygwin、およびWindowsのコマンドラインインターフェイスで発生します。このエラーは、編集されたシェルスクリプトを実行しようとするか、古いDOS / WindowsまたはMacシステムで作成されました。
このエラーメッセージは、ファイルの手動コピーなどの日常的なタスクのためにLinuxコマンドラインにコマンドを入力しているときにも表示されます。シェル。
予期しないトークン `( 'の近くで構文エラーが発生する原因は何ですか?
このエラーメッセージの理由は非常に多様であり、コマンドの実行時に構文が間違っている可能性が数千あるため、1つの記事に記載することはできません。 このエラーの主な理由は次のとおりです。
- いずれかのプラットフォームでコマンドを実行するときの構文が正しくありません。 コマンドを正しく使用していないか、間違った構文を入力しています。
- シェルはUnix / DOSシステム間で互換性がありません。
- 別のソースからbashシェルスクリプトを実行すると問題が発生します。
この記事では、コーディングの基本を知っていて、何をしているのかを把握していることを前提としています。 初心者の場合、実行しようとしている言語/コマンドの詳細なチュートリアルに従うことをお勧めします。 おそらくいくつかの構文を間違えているでしょう。
解決策1:コマンドの構文と形式を確認する
このエラーメッセージが表示される一番の理由は、コードの構文が間違っているか、コマンドの形式が正しくないためです。 各コマンドには定義済みの形式があり、ドキュメントで確認できます。 いくつかのパラメーターはオプションですが、他のパラメーターは必須です。
さらに、余分なスペース 、 二重引用符の使用、および必須パラメーターが必要な場合は、特別な注意が必要です。 それらのいずれかが欠落しているか、誤って宣言されている場合、コードを実行できません。
たとえば、次のコードの代わりに
[mycom7]#./ctopo.sh um_test1 [(1, 2)、(2, 1)]
として実行する必要があります
[mycom7]#./ctopo.sh um_test1 "[(1, 2)、(2, 1)]"
また、コマンド/シェルスクリプトが複数行にわたる場合は、コマンド/シェルスクリプトを正しく実行していることを確認してください。
パラメータタイプのため、二重引用符が必要です。 余分なスペースがあると、コードが台無しになり、エラーメッセージが表示される場合があります。 実行しているコマンドの公式ドキュメントを確認し、そこに問題があるかどうかを確認してください。
解決策2:シェルスクリプトのトラブルシューティング
ソースシステムでは機能するがターゲットではエラーを返すシェルスクリプトを使用している場合、実行中に保存されている変数を確認してスクリプトのトラブルシューティングを行い、問題の原因を確認できます。 これは非常に一般的な原因です。いくつかの場合、シェルは印刷できない文字を解釈しようとします。
「vx」のパラメーターでシェルを実行してみてください。 これにより、実行されているコマンドとスクリプトに保存されている値が表示されます。 ここからトラブルシューティングを行い、問題の原因を診断できます。
たとえば、「vx」を次のように含めた後、ターミナルでスクリプトを実行します。
#sh -vx ./test_script5.sh
次のように「cat」コマンドを使用して、スクリプトの内容を確認できます。
#cat test_script5.sh
解決策3:「dos2unix.exe」コマンドを使用する
Windows / DOSテキストファイルでは、改行はキャリッジリターン(\ r)とそれに続く改行(\ n)の組み合わせです。 Mac(Mac OS Xより前)では、改行に単純な復帰(\ r)が使用されていました。 Unix / LinuxおよびMac OS Xは、改行(\ n)改行を使用します。 Cygwinを使用している場合、余分なCarriage Return(\ r)文字があるため、DOS / Windowsおよび古いMacで作成されたスクリプトの処理に失敗します。
ここで、スクリプトを正しい形式に変換する「dos2unix.exe」コマンドを作成し、問題なく実行できます。
最後に、コマンドと使用しているプラットフォームのタイプを調査し、矛盾がないことを確認する必要があります。 すべての可能性を網羅することはできないため、どのような種類のエラーが発生し、どのように修正するかを考えてください。