Return 子脚本到父脚本的代码

Return Code of a Child Script to Parent script

我有一个父 ksh 脚本,它依次执行如下所示的子脚本。

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

RC=`echo $?`

当子脚本 (Demo.sh) 失败时,return 代码无法正确捕获。它总是 returning 0。我理解这个问题,因为无论成功与否,我都在推动 STDERR 和 STDOUT,所以它总是 return 代码为 0。

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

你可以这样做:

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

问题是$?是管道的return值的经典问题,也就是管道中最后一个命令return的值,即tee。在 bash 中,通常使用 PIPESTATUS 数组解决此问题,但在这里我们使用将 return 值回显到不同文件描述符并适当重定向的方法。