繁体   English   中英

捕获管道中是否有任何非零退出的进程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM