捕获退出代码和命令的输出

捕获退出代码和命令的输出

我想做:

1.sh:

#!/usr/bin/env bash
set -eu
r=0
a=$(./2.sh || r=$?)
echo "$a"
echo "$r"

2.sh:

#!/usr/bin/env bash
echo output
exit 2

但它输出:

$ ./1.sh
output
0   # I'd like to have `2` here

由于$(...)运行一个单独的外壳。那么,如何捕获退出代码和输出呢?

答案1

一个进程调用另一个进程的退出代码是被调用进程的退出代码。

$($($($($(exit 2)))))
echo $?
2

这里有 5 个级别的调用。

在你的情况下:

r=0
a=$(./2.sh)
r=$?
echo "$a"
echo "$r"

相关内容