この文の意味を理解していません。共同プロセス内部に強く打つマニュアルページ:
コプロセスは非同期命令で生成されるため、コルーチンこのコマンドは常に成功を返します。 coprocess の戻り状態は「command」の終了状態です。
「成功」と「成功」の違いは何ですか?戻り値そして「成功/エラー」(0/非-0)終了ステータス?どう違うのか強く打つ?どのように彼らが違いを実現することができますか?
ベストアンサー1
コマンドの終了ステータスを取得するには、対応するwait
プロセスIDを取得する必要があります。次の例では、これを確認し、状態間の違いを確認できます。
coproc mytr { tr a b; exit 2; }
rc=$? fdi=${mytr[0]} fdo=${mytr[1]} pid=$mytr_PID
echo "rc=$rc fdi=$fdi fdo=$fdo pid=$pid"
echo aaa >&$fdo
exec {fdo}>&-
cat -v <&$fdi
wait $pid
echo $?
mytr
aをbに変換してeofを読み、コード2で終了する名前付きcoprocを起動します。次のエコーは、coprocコマンドの戻りコードが0(成功を示す)で、bashが配列をプロセスの入出力mytr
ファイル記述子に設定したことを示しています。 pidは、mytr_PID
coprocessが終了すると消えるのでコピーする変数です。
文字列 "aaa"をcoprocに送信し、構文を使用して入力fdを閉じます{variable}>&-
。 「bbb」というコマンドの出力を読み取り、tr
プロセスが終了するのを待ちます。終了コードはwait
プロセスの終了コードです。出力は次のとおりです
rc=0 fdi=63 fdo=60 pid=8137
bbb
2
注:fdoとfdiは親プロセスで見ることができるので、fdoのエコーは出力サブ処理する入力する。