Как написать expect в оболочке

Как написать expect в оболочке

Это продолжение моего предыдущего вопроса:Команда Spawn не найдена

Ссылаясь на несколько старых постов, я написал эти команды. Если это неверно, то как я могу запустить ssh на удаленном сервере и выполнить некоторые команды?

решение1

Одна из возможностей: создать файл expect-syntax и вызвать его через скрипт оболочки:

 #!/bin/bash
 expect -f my-file.exp $1 # parameter 1 is the server name

В my-file.exp вам потребуются только команды:

spawn ssh "username@[lindex $argv 0]"  # param 1 : server name
                                # expect now reads the input and does what you tell it on certain patterns

expect { 
  "password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
  "done" { send_user "exiting"; }
}

В этом примере выполняется вход на сервер, отправка открытого пароля, затем отправка некоторой команды и продолжение работы.

Если на входе отображается «готово», процесс завершается. В противном случае через несколько секунд произойдет тайм-аут.

Пока вы выполняете «exp_continue», он остается внутри цикла expect {}, сопоставляя входные данные и выполняя соответствующий вывод.

решение2

Вы также можете использовать expect shebang в своем скрипте оболочки и написать ожидаемый скрипт.

#!/usr/bin/expect -f 
spawn ssh localhost 
expect "password: " 
send "password\r" 
expect "{[#>$]}"         #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...

Связанный контент