Como escrever expect no shell

Como escrever expect no shell

Esta é a continuação da minha pergunta anterior:Comando de geração não encontrado

Depois de me referir a alguns posts antigos, escrevi esses comandos. Se estiver errado, como posso executar o ssh no servidor remoto e executar alguns comandos?

Responder1

Uma possibilidade é: criar um arquivo expect-syntax e chamá-lo por meio de um script de shell:

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

No my-file.exp você teria apenas comandos esperados:

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"; }
}

Este exemplo efetua logon no servidor enviando a senha em texto não criptografado, envia algum comando e continua.

Se ler "concluído" na entrada, ele será encerrado. Caso contrário, o tempo limite expirará após alguns segundos.

Contanto que você faça um "exp_continue", ele permanecerá dentro do loop {} esperado, combinando a entrada e gerando a saída apropriada.

Responder2

Você também pode usar um expect shebang em seu shellscript e escrever um script expect.

#!/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...

informação relacionada