私は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
もそうではありません。
試してください:
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
をインストールするためのチュートリアルを見つけることができます。その後、私が提供したソリューションは適切に機能するはずです。幸運を祈ります。
明らかにシバンから、そのスクリプトは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'