我想做:
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"