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

x-y*_*uri 4 shell command-substitution exit-status

我想做:

1.sh

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

2.sh

#!/usr/bin/env bash
echo output
exit 2
Run Code Online (Sandbox Code Playgroud)

但它输出:

$ ./1.sh
output
0   # I'd like to have `2` here
Run Code Online (Sandbox Code Playgroud)

因为$(...)运行一个单独的shell。那么,我如何同时捕获退出代码和输出?

Emm*_*uel 10

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

$($($($($(exit 2)))))
echo $?
2
Run Code Online (Sandbox Code Playgroud)

这里有 5 个级别的呼叫。

在你的情况下:

r=0
a=$(./2.sh)
r=$?
echo "$a"
echo "$r"
Run Code Online (Sandbox Code Playgroud)