我想在一个bash脚本中运行一个可能失败的命令,将其退出代码存储在一个变量中,并运行一个后续命令,无论该退出代码如何。
我试图避免以下问题:
使用set
:
set +e # disable exit on error (it was explicitly enabled earlier)
docker exec $CONTAINER_NAME npm test
test_exit_code=$? # remember exit code of previous command
set -e # enable exit on error
echo "copying unit test result file to host"
docker cp $CONTAINER_NAME:/home/test/test-results.xml .
exit $test_exit_code
使用 if
:
if docker exec $CONTAINER_NAME npm test ; then
test_exit_code=$?
else
test_exit_code=$?
fi
echo "copying unit test result file to host"
docker cp $CONTAINER_NAME:/home/test/test-results.xml .
exit $test_exit_code
有没有一种语义简单的方法告诉bash"在发生错误时运行命令,并告诉我它的退出代码"?
我最好的备选方法仍然很令人困惑,需要注释来向后续开发人员解释(只是一个更简洁的if/else语句)。
docker exec $CONTAINER_NAME npm test && test_exit_code=$? || test_exit_code=$?
echo "copying unit test result file to host"
docker cp $CONTAINER_NAME:/home/test/test-results.xml .
exit $test_exit_code
bash
通常不会在失败时退出,因此您无需采取任何特殊措施。 - Barmarset -e
使其在失败时退出,但这不是默认设置。 - Barmarset -e
。 - Val Kornea"$CONTAINER_NAME"
周围缺少双引号(但诚然,在此变量中肯定不包含空格或*
,因此这种特定参数扩展在此没有任何问题 :)。 - ErikMD