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
)。あなたは見つけることができますここbash
FreeBSD インストールチュートリアルです。私が提供したソリューションは正常に動作します。頑張ってください。
答え2
明らかにshe-bangでは、スクリプトはbash
notによって実行されるように意図されています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'