问题
当我们在linux shell(如bash)中使用管道执行多个命令时,$?
只能获取到最后一条命令的返回码,那么应该怎么获取管道前面的命令的返回码呢,请看下文:
当执行一条管道命令时,linux会使用PIPESTATUS这个数组变量来保存每个管道的返回码。PIPESTATUS[0]
表示管道中第一个命令的返回码,PIPESTATUS[1]
表示第二个命令的返回值,这是一个共享的变量,为避免别的命令改变它的内容,可以将它复制到一个新的数组。
#!/bin/bash
echo "tftf"
true | false | true | false
RC=( "${
PIPESTATUS[@]}" )
echo "RC[0] = ${RC[0]}" # true = 0
echo "RC[1] = ${RC[1]}" # false = 1
echo "RC[2] = ${RC[2]}" # true = 0
echo "RC[3] = ${RC[3]}"