Моя реальная цель состоит в том, чтобы иметь сценарий , который будет выполняться локально 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, но печатает Success! Почему бы не выйти с 1?

1 ответ1

2

Вы используете << чтобы включить здесь документ, который подвергается расширению параметров, подстановке команд и арифметическому расширению. В частности, $? заменяется на 0 (возможно) до того, как оно будет передано в ssh.

Чтобы избежать этого, вам нужно заключить в кавычки здесь, например <<'SSH_EOF' . Фактический разделитель по- прежнему SSH_EOF . Вы, вероятно, должны сделать то же самое для ожидаемого EXPECT_EOF , в случае будущих изменений, которые включают $ .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .