下面的命令序列运行良好
EHRbase_VERSION=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)
echo ${EHRbase_VERSION}
java -jar application/target/application-${EHRbase_VERSION}.jar --cache.enabled=false > log &
grep -m 1 "Started EhrBase in" <(tail -f log)但是当我尝试有条件地运行它们时,它们不像我想要的那样工作
if [ "${MY_ENV}" != "FOO" ]; then
EHRbase_VERSION=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)
echo ${EHRbase_VERSION}
java -jar application/target/application-${EHRbase_VERSION}.jar --cache.enabled=false > log &
grep -m 1 "Started EhrBase in" <(tail -f log)
fi结果是
0.13.0
[1] 17584
# from here it seems to hang and I have to exit w/ CTRL+C出什么问题了?如何用BASH正确地写出它?如何用POSIX编写?
发布于 2020-09-05 15:14:05
简单地说:如果file是一个常规文件(而不是命名管道),tail -f file就永远不会完成。如果您的文件中没有任何与Started EhrBase in匹配的消息,那么这段代码将永远挂起,这是正常的,也是预期的。
即使没有周围的if,它也永远不会完成--周围的代码肯定是一条红鲱鱼。
也许您只想等待一定的时间来查看日志消息?timeout (来自GNU coreutils)是您的朋友:
java -jar "application/target/application-${EHRbase_VERSION}.jar" \
--cache.enabled=false >log & app_pid=$!
if ! tail -f log | timeout 30s grep -m 1 "Started EhrBase in"; then
echo "WARNING: Did not see a startup message even after waiting 30s" >&2
if kill -0 "$app_pid"; then
echo "...although EHRbase is still running" >&2
else
echo "...and EHRbase did not successfully start" >&2
fi
fihttps://stackoverflow.com/questions/63755195
复制相似问题