web-dev-qa-db-ja.com

構文エラー: "("予期しない(Wordを期待する)---私のbashスクリプトで

私はbashスクリプトを持っています:

#!/bin/bash

VAR1="var1"
VAR2="var2"
VAR3="var3"

cat ${VAR1} \
    <(echo -e '<something>') \                       # <--------- here's the error
    ${VAR2}/file123.txt \
    <(echo -e '</something>\n<something2>') \
    ${VAR3}/file456.txt \
    <(echo -e '</something2>')

私がそれを実行するとき:sh my_script.sh、エラーが発生します:

 my_script.sh: 9: Syntax error: "(" unexpected (expecting Word)

更新:

bashが見つからない、「/ bin/bash」が存在しないbashもそうではありません。

1
Kurama

試してください:

chmod 755 "my_script.sh"

次に、このように単純に実行します

my_script.sh

最初の#!/bin/bash行は、スクリプトを実行するシェルをシステムに通知するために使用されます。 sh my_script.shで実行することで、これを上書きしていると思います。 /bin/bash my_script.shを明示的に記述することもできます。また、スクリプトにbash固有の構文がある場合は、拡張子を.bashに変更してより明確にすることを検討する必要があります。


[〜#〜]編集[〜#〜]

FreeBSDディストリビューションにbashがないようです(FreeBSDのデフォルトのシェルはtcshのようです)。あなたは ここ FreeBSDにbashをインストールするためのチュートリアルを見つけることができます。その後、私が提供したソリューションは適切に機能するはずです。幸運を祈ります。

3
Valentin B.

明らかにシバンから、そのスクリプトはbashではなくshによって実行されることを意図しています(引用符で囲まれていない変数のため、構文はzsh構文に似ています)。

bashまたはzshで実行することをお勧めします。これらのシェルが利用できない場合は、それらをインストールするか、そのスクリプトをsh構文に変換できます。これはここでは簡単です。

sh言語(BourneまたはPOSIXの両方)には、<(...)演算子がありません。これはkshに由来し、bashおよびzshでもサポートされています。 echo -eは非標準であり、bashおよびkshを使用しても一部の環境でのみ機能します。

標準のsh相当は次のようになります。

var1="var1"
var2="var2"
var3="var3"

cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'
3