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)