予期しないトークンの近くの構文エラー `< '

私は変数aおよびbへのコマンドの出力を読み取るスクリプトを作成します。これはスクリプトです

#!/bin/bash read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) echo "The value of a is $a" echo "The value of b is $b" 

次のように構文エラーが発生します:

line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)" 

しかし、コンソールで同じコマンドを入力すると、問題なく機能します。

app@user:/tmp> read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) app@user:/tmp> echo $a FAILED app@user:/tmp> echo $b STARTED 

これに関するヘルプは本当にありがたいです。

コメント

  • この動作をスクリプトから再現することはできません。スクリプトをどのように呼び出していますか? $ ./script.sh
  • @Ketanとして呼び出しています。shscript.shとして呼び出しています。ちょうど今、。/ script.shを使ってみましたが、希望の結果が得られています。 aの値はFAILEDですbの値はSTARTEDです。返信ありがとうございます… shfile.shと./file.shを使用して同じスクリプトを実行しているときになぜ違うのか知りたいですか??
  • sh 'コマンド置換を許可しないでください。 bash script.shで呼び出してみてください。 ./script.shによる同じ呼び出しは、スクリプトの/ bin / ** bash **であるsha-bangで実行されます。
  • @SudevJash参照:スクリプトを実行するための./とshの違いは何ですか?
  • @Costasはい、それでも正常に機能していますbashscript.shと希望の出力が得られます…ありがとうございます…

回答

sh(ほとんどの(Debian派生)システムではdashにリンクされています)は、プロセス置換を許可しません /em>。bash script.shで呼び出してみてください。./script.shによる同じ呼び出しはsha-bangで実行されます。これは /bin/bash

コメント

  • @MichaelDurrantああ、あなたの変更は私が言ったことの反対を意味するようになりました。
  • @muru変更を受け入れることができません' t o bash。正確にはdashを意味します。 file $(which sh)出力/bin/sh: symbolic link to 'dash'
  • Costas、それは'です意味した。 Michael Durrantが編集を変更して、dashbashに置き換えました。修正していただきありがとうございます。
  • コマンド置換($(echo foo))ではなく、プロセス置換(<( echo foo ))を意味します(これははPOSIX仕様の一部です。
  • @chepnerその通りです。コメントありがとうございます。修復されました。

回答

スクリプトをshfile.shとして呼び出そうとしましたが、エラーが発生していました。 。しかし、。/ file.shおよびbashfile.shと同じスクリプトを呼び出すと、それは機能しており、目的の結果が得られます。

回答

さらに、スクリプトの先頭に次の行を追加するだけです。

#!/bin/bash 

ターミナル/コンソールにスクリプトをbashスクリプトとして実行するように指示し、プロセス置換よりも「<( cmd )」が正常に機能します。

コメント

  • OP 'のスクリプトにはすでにそのシバンがありますが、OPは実行されていました。 file.shまたは./file.shではなくsh file.shとして使用します(彼ら自身の答え)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Deep Theme Powered by WordPress