Shell管道

通过管道执行命令,获取各个命令的返回值

比如执行命令:cmd1 | cmd2 | cmd3 。 如果命令执行完后,通过”$?”获取的是cmd3的返回值。如何获取cmd1和cmd2的返回值呢?

在bash环境下,命令的返回值保存在”PIPESTATUS”数组中:

  • ${PIPESTATUS[0]} 是cmd1的返回值;
  • ${PIPESTATUS[1]} 是cmd2的返回值;
  • ${PIPESTATUS[2]} 是cmd3的返回值;
  • $? 始终等于 ${PIPESTATUS:-1}。

参考文章