我不明白这句话的意思协进程在里面巴什手册页:
由于协进程是作为异步命令创建的,协程命令总是返回成功。协进程的返回状态是“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 $?
我们启动一个命名的 coproc mytr
,它将 a 转换为 b,并在读取 eof 后退出并返回代码 2。以下回显显示该 coproc 命令的返回代码为 0,表示成功,并且 bash 已将数组设置mytr
为输入和输出文件描述符到这个过程。 pid 是mytr_PID
我们复制的变量,因为当协进程结束时它会消失。
我们将字符串“aaa”发送到coproc,然后使用syntax关闭输入fd {variable}>&-
。我们读取命令的输出tr
,即“bbb”,然后等待进程退出。的退出代码wait
是进程的退出代码。输出是
rc=0 fdi=63 fdo=60 pid=8137
bbb
2
注意:fdo 和 fdi 是由父进程看到的,因此 echo to fdo 是输出到子协进程的输入。