コプロセスの戻り値と戻り状態

コプロセスの戻り値と戻り状態

この文の意味を理解していません。共同プロセス内部に強く打つマニュアルページ:

コプロセスは非同期命令で生成されるため、コルーチンこのコマンドは常に成功を返します。 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 $?

mytraをbに変換してeofを読み、コード2で終了する名前付きcoprocを起動します。次のエコーは、coprocコマンドの戻りコードが0(成功を示す)で、bashが配列をプロセスの入出力mytrファイル記述子に設定したことを示しています。 pidは、mytr_PIDcoprocessが終了すると消えるのでコピーする変数です。

文字列 "aaa"をcoprocに送信し、構文を使用して入力fdを閉じます{variable}>&-。 「bbb」というコマンドの出力を読み取り、trプロセスが終了するのを待ちます。終了コードはwaitプロセスの終了コードです。出力は次のとおりです

rc=0 fdi=63 fdo=60 pid=8137
bbb
2

注:fdoとfdiは親プロセスで見ることができるので、fdoのエコーは出力サブ処理する入力する

おすすめ記事