如果以下命令扩展失败,我希望能够发出警告并失败:
#!/usr/bin/env bash
set -Eeuo pipefail
echo "$(invalid_cmd)"
echo "$?"
我没有失败,而是得到以下输出:
./script.sh: line 5: invalid_cmd: command not found
0
使用临时变量。变量赋值的退出状态是最后执行的命令的退出状态 - 在这种情况下
$(...)
。
tmp="$(invalid_cmd)"
ret="$?" # won't get here, set -e will trigger
echo "$tmp"
echo "$ret"
总的来说,
echo "$(stuff)"
只是stuff
。只需运行命令,无需获取命令输出来打印它,命令已经打印它。
invalid_cmd
echo "$?"