SSH не выходит должным образом внутри инструкции if в bash heredoc

Итак, я запускаю этот скрипт, чтобы проверить, работает ли сервер Java удаленно, подключившись к удаленному. Если он не работает, я пытаюсь выйти и запустить другой скрипт локально. Однако после команды выхода он все еще находится в удаленном каталоге.

ssh -i ec2-user@$DNS << EOF
    
    if !  lsof -i | grep -q java ; then
        echo "java server stopped running"
        # want to exit ssh
        exit
        # after here when i check it is still in ssh
        # I want to run another script locally in the same directory as the current script
        ./other_script.sh
    else
        echo "java server up"

    fi;
EOF


person zacha    schedule 27.11.2020    source источник
comment
Выполняя выход в HEREDOC, вы выходите из сеанса ssh и никогда не попадете в раздел ./other_script.sh. Однако следует вернуться в локальную среду, а не в удаленную.   -  person Raman Sailopal    schedule 27.11.2020
comment
я пробовал что-то вроде выхода, но это возвращает меня к удаленной среде. Есть ли у вас какие-либо предложения о том, как справиться с выходом из ssh?   -  person zacha    schedule 27.11.2020
comment
Поместите этот скрипт в другой и, когда java не запущен, выйдите с числом. Затем, когда ssh выйдет, вы можете проверить код выхода в скрипте и при необходимости запустить other_script   -  person Raman Sailopal    schedule 27.11.2020
comment
как это будет выглядеть в bash? вне heredoc я использую оператор if для проверки кода выхода? (в настоящее время это в другом скрипте, просто его часть)   -  person zacha    schedule 27.11.2020
comment
Да, в самом деле.....   -  person Raman Sailopal    schedule 27.11.2020
comment
так что все это может быть в одном сценарии, верно?   -  person zacha    schedule 27.11.2020


Ответы (1)


Выходом является выход из сеанса ssh, поэтому он никогда не переходит к выполнению строки other_script.sh в HEREDOC. Было бы лучше поместить это вне скрипта и действовать из состояния выхода HEREDOC/ssh и так:

ssh -i ec2-user@$DNS << EOF

if !  lsof -i | grep -q java ; then
    echo "java server stopped running"
    exit 7   # Set the exit status to a number that isn't standard in case ssh fails
else
    echo "java server up"
fi;
EOF
if [[ $? -eq 7 ]]
then
    ./other_script.sh
fi
person Raman Sailopal    schedule 27.11.2020
comment
Спасибо!! единственное изменение, которое мне пришлось сделать, это использовать -eq вместо == в выражении if - person zacha; 27.11.2020