我正在尝试使用陷阱,以便在主应用程序jar成功存在(0退出代码)的情况下运行一个干净的应用程序jar:
trap "exit_code=$?; if [ "${exit_code}" = "0" ]; then java -jar /clean-app.jar; fi" EXIT
java -jar /main-app.jar
但我得到以下错误,不确定我得到背后的原因:
/bin/bash: line 1:[: =:一元运算符期望
谁能分享一个指针吗?谢谢你
不能像这样嵌套双引号。在这里,您可以为外层切换为单引号。无论如何,您都需要这样做,因为您需要防止在调用trap
之前扩展$?
。
trap 'exit_code=$?; if [ "${exit_code}" = "0" ]; then java -jar /clean-app.jar; fi' EXIT
最好先定义一个函数
handler () {
exit_code=$?
if [ "$exit_code" = 0 ]; then java -jar /clean-app.jar; fi
}
trap handler EXIT
在任何一种情况下,您都不需要真正的exit_code
,因为您不需要测试后的原始退出代码。您也可以使用-eq
,因为$?
保证是一个整数。
handler () {
[ $? -eq 0 ] && java -jar /clean-app.jar
}