[英]Capture if any process in pipeline exits with non-zero
我有以下代码:
ql_timeout=2500 ql_write_and_keep_open | nc localhost "${ql_server_port}" | while read response; do
echo "response from server: $response";
if [[ "$response" == "released" ]]; then
echo "quicklock: Lock was released.";
return 0;
fi
done || {
>&2 echo "quicklock: could not release lock.";
return 1;
}
发生的情况是第一个proc ql_write_and_keep_open
将超时并且管道将关闭。
如果有任何进程以非零值退出,我想我想捕捉一下,有没有办法做到这一点?
我也不确定是否使用:
done || { ... };
还是正确的语法。 我确实知道,虽然while read
过程发生在子shell中。
这些答案非常好: https : //unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another
我认为这基本上是我想要做的:
(
set -o pipefail;
ql_node_value="$json" ql_to=2500 ql_write_and_keep_open | nc localhost "${ql_server_port}" | while read response; do
echo "response from server: $response";
return 0;
if [[ "$response" == "released" ]]; then
echo "quicklock: Lock was released.";
return 0;
fi
done;
)
exit_code=$?
if [[ ${exit_code} -eq 0 ]]; then
echo "quicklock: lock was released!";
fi
echo "quicklock: could not release lock." >&2 ;
return 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.