Você pode ajudar a depurar expect
adicionando a opção -d
. Em seu exemplo, você veria que está fazendo "...send "\r"..."
, que é avaliado pelo shell como ...send r...
porque \r
está sozinho fora da cota dupla. Tente alterar isso para send \"\r\"
, como nos outros casos. Você também precisa colocar um retorno de carro semelhante no final de cada envio: send \"root\r\"
.
Seria mais fácil escrever um arquivo de script de shell pequeno ou usar aspas simples, convertendo para doublequotes para o ${1:-0}
que precisa ser interpolado:
expect -c 'spawn screen /dev/ttyS'"${1:-0} ${2:-115200}"'; send \r; expect " login: ";...'
Este script completo (sem usar o shell) também lida com o caso já registrado:
#!/bin/expect --
set tty 0
set baud 115200
if { $argc >= 1 } {
set tty [lindex $argv 0]
}
if { $argc >= 2 } {
set baud [lindex $argv 1]
}
spawn screen /dev/ttyS$tty $baud
send \r
expect {
"login: " {
send root\r
expect "Password: "
send root\r
}
"#"
}
interact