Я создал скрипт, в котором мне нужно запустить несколько команд на удаленном терминале, используя SSH. Итак, я использовал операторы ожидания, но проблема в том, что, предположим, мне нужно запустить 5 операторов на удаленном терминале, а затем из 6 раз, примерно 3-4 раза, эти 5 команд выходят из синхронизации, т.е. команда не выполняется в правильной последовательности и не должным образом, то есть сначала должна завершиться 1-я команда, а затем должна запуститься вторая. Я пытался установить тайм-аут 5 или даже 10, но это не помогло. Я даже пробовал спать 2 или 4, но это тоже не помогло. Вот сценарий, который я создал вместе с выводом. Помогите мне, пожалуйста. Спасибо.
Скрипт:
do some work on current shell
#echo $name
## ssh part of script starts
/usr/bin/expect<<EXEOF
set timeout -1
match_max 100000
spawn ssh "myuser\@IP_ADDRESS"
expect "*assword:*"
send -- "mypassword\r"
send -- "\r"
#expect -re "(%|*>|#|\\$)"
expect "*>"
#expect "*OFR:offline-ure>" #actual prompt of ssh terminal
send -- "\r"
set timeout 20
#sleep 1
send -- "tcsh\r"
send -- "\r"
set timeout 2
expect -re "(%|>|#|\\$)"
#set timeout 10
send -- "cd /home/myuser/cap/\r"
send -- "\r"
set timeout 4
expect -re "(%|>|#|\\$)"
send -- "source cap.env\r"
send -- "\r"
set timeout 10
send -- "cd /home/myuser/bin/\r"
set timeout 5
expect -re "(%|>|#|\\$)"
send -- "$myCommand\r"
#set timeout 50
#sleep 40
send -- "exit\r"
expect -re "(%|>|#|\\$)"
send -- "exit\r"
expect eof
EXEOF
echo "end of ssh script"
some task after ssh part of script
Когда я запускаю его, я вижу результат ниже:
spawn ssh myuser@IP_ADDRESS
[email protected]'s password:
Last login: Tue Mar 10 07:56:19 2015 from XX.XX.XX.XX
OFR:offline-ure> tcsh (see here all commands are sent together)
source ccap.env
cd /home/myuser/bin/
mycommand_String_value
exit
exit
[sncpuser@offline-ure ~]$
[sncpuser@offline-ure ~]$ source ccap.env
ccap.env: No such file or directory.
[sncpuser@offline-ure ~]$
[sncpuser@offline-ure ~]$ cd /home/myuser/bin/
[sncpuser@offline-ure bin]$ mycommand_string_value
some output of my command
[sncpuser@offline-ure bin]$ exit
exit
OFR:offline-ure>
OFR:offline-ure> cd /home/myuser/cap/ (this was second command)
OFR:offline-ure> exit
Connection to xx.xx.xx.xxx closed.
end of ssh script
Обратите внимание, что в выходных данных все команды, которые мне нужно выполнить на терминале SSH, отправляются одновременно и, следовательно, не выполняются должным образом и в правильной последовательности. Пожалуйста, предложите, как я могу это решить. Заранее спасибо.