我有一个父级ksh脚本,该脚本依次执行以下子脚本。
((Demo.sh $TableName $DatFile | tee $STDLOGFILE) > $STDERRLOG 2>&1)
RC=`echo $?`
子脚本(Demo.sh)失败时,返回代码无法正确捕获。它总是返回0。我理解该问题,因为无论是否成功,我都推STDERR和STDOUT,所以它总是将代码返回0。
请帮助我捕获子脚本的实际返回代码。
答案 0 :(得分:1)
您可以这样做:
RC=$( { { Demo.sh "$TableName" "$DatFile"; echo $? >&3; } |
tee $STDLOGFILE; } 3>&1 > $STDERRLOG 2>&1; )
问题是$?
是管道的返回值,这是管道中的最后一条命令tee
返回的值,这是一个经典的问题。在bash中,通常可以使用PIPESTATUS数组解决此问题,但是在这里,我们使用将返回值回显到其他文件描述符并进行适当重定向的方法。