Это первый раз, когда я пишу сценарий оболочки. Я пытался провести как можно больше исследований, чтобы избежать глупых/повторяющихся вопросов. Пожалуйста, извините, если это повтор/тупой вопрос.
У меня есть сценарий оболочки, который подключается к удаленной машине Linux и запускает там сценарии. Я использую «ожидание» для создания ssh-соединения и выдачи команд для запуска задания. Однако у меня возникают проблемы при закрытии соединения после завершения задания.
Это мой сценарий:
set prompt "(%|#|\\$|%\]) $"
expect -c 'spawn ssh $UN@$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
interact'
Этот сценарий успешно запускает файл сценария для меня (параметры $UN и $STAGE являются входными для сценария. Я опустил их здесь для простоты). Тем не менее, это оставляет меня с открытым соединением. Я попытался закрыть соединение после запуска скрипта, используя следующее вместо вышеуказанного
expect -c 'spawn ssh $UN@$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
expect -regexp "$PROMPT"; send "exit \n"'
Это закрывает соединение, но я заметил, что мой файл сценария вообще не запускается. Также settings_log.txt вообще не создается.
Означает ли это, что команда выхода прерывает процесс до его завершения? Я пытался использовать «сон» перед выходом, но это не помогло. Есть ли лучший способ разорвать соединение при использовании ожидания? Любая помощь приветствуется.