echo
次のテストスクリプトでは、組み込みのバックグラウンドで実行され、標準出力をアタッチする基本コプロセスを実行します。
#!/bin/bash
# TEST 1
coproc /bin/sleep 100
echo >&${COPROC[1]} &
明らかな理由もなく、スクリプトは常に失敗し、次の出力が表示されます。
./test.sh: line 4: ${COPROC[1]}: Bad file descriptor
正しい構文はむしろこれである必要があるのだろうか(アンパサンドはリダイレクトの前に移動された):
#!/bin/bash
# TEST 2
coproc /bin/sleep 100
echo & >&${COPROC[1]}
この2番目の例は、実行中にエラーを報告しないため機能しているように見えますが、この構文では、リダイレクトは実際には実行されません。実際、この他のテストを検討してください。
#!/bin/bash
# TEST 3
/bin/echo abc & >xfile
テスト3はファイルを作成しますxfile
が、何も書き込みません。不思議なことに、リダイレクト後にアンパサンドを再度配置しようとすると、echo
作業は正常になります。
#!/bin/bash
# TEST 4
/bin/echo abc >xfile &
テスト4はxfile
、文字列内にファイルを作成しますabc
。
coproc
リダイレクトエラーの原因や正しい構文について何か考えがありますか?