将子脚本的代码返回到父脚本

时间:2019-01-03 13:43:48

标签: shell unix ksh

我有一个父级ksh脚本,该脚本依次执行以下子脚本。

((Demo.sh $TableName $DatFile | tee $STDLOGFILE) > $STDERRLOG 2>&1)

RC=`echo $?`

子脚本(Demo.sh)失败时,返回代码无法正确捕获。它总是返回0。我理解该问题,因为无论是否成功,我都推STDERR和STDOUT,所以它总是将代码返回0。

请帮助我捕获子脚本的实际返回代码。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

 RC=$( { { Demo.sh "$TableName" "$DatFile"; echo $? >&3; } |
     tee $STDLOGFILE; } 3>&1 > $STDERRLOG 2>&1; )

问题是$?是管道的返回值,这是管道中的最后一条命令tee返回的值,这是一个经典的问题。在bash中,通常可以使用PIPESTATUS数组解决此问题,但是在这里,我们使用将返回值回显到其他文件描述符并进行适当重定向的方法。