Bash -[: =:陷阱执行期间期望的一元操作符



我正在尝试使用陷阱,以便在主应用程序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
}

最新更新