構文エラー: "("予期しない(単語が必要です)---私のbashスクリプトにあります

構文エラー: "("予期しない(単語が必要です)---私の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

努力する:

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)。あなたは見つけることができますここbashFreeBSD インストールチュートリアルです。私が提供したソリューションは正常に動作します。頑張ってください。

答え2

明らかにshe-bangでは、スクリプトはbashnotによって実行されるように意図されていますshzsh引用されていない変数のため、構文は構文に似ているようです)。

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

このsh言語(BourneまたはPOSIX)には演算子はありません<(...)。で提供され、サポートさkshれています。非標準であり、特定の環境でのみ使用することもできます。bashzshecho -ebashksh

標準に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'

関連情報