预计不会退出非零值

预计不会退出非零值

我真正的目标是编写一个脚本,该脚本将在本地运行以通过 ssh 连接到远程服务器,重新启动 tomcat,并用于expect等待“服务器正在启动”消息,或者在启动失败时退出非零值。我的尝试是这个脚本。我使用 localhost 进行调试,并使用 INFO 而不是“启动失败”来人为触发退出:

ssh -T localhost <<SSH_EOF
docker restart app
expect <<EXPECT_EOF
set timeout 30
spawn docker logs --since 1s -f app
expect_before "INFO" { exit 1 }
expect "Server startup in"
EXPECT_EOF
if [[ $? -eq 0]]; then
    echo "Success!"
else
    echo "Failed!"
fi
SSH_EOF

脚本确实在第一条 INFO 消息时退出,但打印成功!为什么它不会以 1 退出?

答案1

您正在使用<<包含这里的文件,即受参数扩展、命令替换和算术扩展的影响。特别是,$?在传递给 ssh 之前,就被 0 替换了(可能)。

您需要引用此处的分隔符以避免这种情况,例如<<'SSH_EOF'。实际分隔符仍然是SSH_EOF。您可能应该对 expect 执行相同的操作EXPECT_EOF,以防将来的更改涉及$

相关内容