无法确定未记录退出代码的原因

Ale*_*lls 3 bash shell-script exit exit-status

奇怪的一个,所以以下不会记录“bash退出代码......”

#!/usr/bin/env bash

OUTPUT_PATH=${PROJECT_ROOT:-$PWD}/npm-install-output.log

npm --loglevel=warn --progress=false install > ${OUTPUT_PATH} 2>&1 &&
export NODE_PATH=${NODE_PATH}:~/.suman/node_modules &&
node $(dirname "$0")/test.js &&

EXIT=$? &&
echo " " && # newline
echo "bash exit code => $?" &&
exit ${EXIT}
Run Code Online (Sandbox Code Playgroud)

如果我在node命令后删除一个“&&”,如下所示:

#!/usr/bin/env bash

OUTPUT_PATH=${PROJECT_ROOT:-$PWD}/npm-install-output.log

npm --loglevel=warn --progress=false install > ${OUTPUT_PATH} 2>&1 &&
export NODE_PATH=${NODE_PATH}:~/.suman/node_modules &&
node $(dirname "$0")/test.js  # <<<<< removed "&&" chars

EXIT=$? &&
echo " " && # newline
echo "bash exit code => $?" &&
exit ${EXIT}
Run Code Online (Sandbox Code Playgroud)

然后节点进程将以非零代码退出,但随后 bash 说:

bash 退出代码 => 0

这两个都没有给出正确的结果,我的代码有问题。我要捕获正确的节点进程退出码,我要打印出来!可能有什么问题?

Vin*_*nce 6

$?是上一个命令的退出状态。在这种情况下,它总是返回 0 因为echo " "成功。请使用$EXIT代替$?

#!/usr/bin/env bash

OUTPUT_PATH=${PROJECT_ROOT:-$PWD}/npm-install-output.log

npm --loglevel=warn --progress=false install > ${OUTPUT_PATH} 2>&1 &&
export NODE_PATH=${NODE_PATH}:~/.suman/node_modules &&
node $(dirname "$0")/test.js  # <<<<< removed "&&" chars

EXIT=$? &&
echo " " && # newline
echo "bash exit code => $EXIT" &&
exit ${EXIT}
Run Code Online (Sandbox Code Playgroud)