Tengo un archivo de texto con un montón de operaciones que me gustaría enviar usando mi script de espera que se ve así (reemplazando op1 y op2 con los comandos en mi archivo textr, un comando por línea):

#!/usr/bin/expect
spawn ssh root@ccTest telnet jpaxdp
expect {\-> }
send "op1(20)\r"
expect {\-> }
send "op2\r"
expect {\-> }
send "exit\r"
expect eof

¿Cómo puedo hacer esto?

1
stdcerr 21 jul. 2016 a las 20:06

2 respuestas

La mejor respuesta

No creo entender tu pregunta. Me parece que lo más fácil de hacer es dejar que Espere maneje la lectura del archivo:

#!/usr/bin/expect
set command_file [lindex $argv 0]
spawn ssh root@ccTest telnet jpaxdp
expect {\-> }

set fh [open $command_file r]
while {[gets $fh line] != -1} {
    send "$line\r"
    expect {\-> }
}
close $fh

send "exit\r"
expect eof

Entonces

1
glenn jackman 21 jul. 2016 a las 19:10

Puede usar el script bash para crear una secuencia de comandos para esperar y enviárselos.

Por ejemplo, tienes cmds.txt:

echo hello
echo goodbye

Y el siguiente script de bash llamado ex.sh:

#!/bin/bash

echo 'spawn bash'
while read line; do
    echo 'expect {$ }'
    echo send '"'"$line\r"'"'
done
echo 'expect {$ }'
echo 'send "exit\r"'
echo 'expect eof'

Así que ahora todo lo que tienes que hacer es usar pipelines como ese:

cat cmds.txt | bash ex.sh | expect

Emite:

admin@admin:/tmp$ cat cmds.txt | bash ex.sh | expect 
spawn bash
admin@admin:/tmp$ echo hello
hello
admin@admin:/tmp$ echo goodbuy
goodbuy
admin@admin:/tmp$ exit
exit
0
frist 21 jul. 2016 a las 18:14