Это первый раз, когда я пишу скрипт оболочки. Я старался провести как можно больше исследований, чтобы избежать глупых / повторяющихся вопросов. Прошу прощения, если его повторить / тупой вопрос.
У меня есть сценарий оболочки, который подключается к удаленной машине 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 вообще не создается.
Значит ли это, что команда выхода прерывает процесс до его завершения? Я пытался использовать «сон» перед выходом, но это не помогло. Есть ли лучший способ разорвать соединение при использовании ожидаемого?
Любая помощь приветствуется.