Почему '\ n' ('\ r') не работает в моем ожидаемом скрипте - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу ввести y+enter, чтобы ответить на вопрос при выполнении copy tftp:something.Скрипт отправит y, но \n не работает.Он останется (y/n)y и останется там, не выходя и не делая что-то еще.Я пробовал \r, и результат был таким же.Кто-нибудь знает причину?

#!bin/bash

expect -c "
set timeout -1
spawn telnet x.x.x.x
expect \"username\"
send \"user\n\"
expect \"password\"
send \"pw\n\"
expect \"model\"
send \"copy tftp:something\n\"
expect \"(y/n)\"
send \"y\n\"
expect eof
"
exit 0

1 Ответ

0 голосов
/ 13 февраля 2019

Я предпочитаю использовать \r, чтобы "нажать enter".

Во-вторых, весь ваш скрипт bash ожидаем, поэтому удалите внешний слой bash.

#!/usr/bin/expect -f
set timeout -1
spawn telnet x.x.x.x
expect "username"
send "user\r"
expect "password"
send "pw\r"
expect "model"
send "copy tftp:something\r"
expect "(y/n)"
send "y\r"
expect eof

Если у вас есть большелогика в части bash, чтобы избежать кавычек, используйте heredoc:

#!/bin/bash
expect <<'END_EXPECT'
    set timeout -1
    spawn telnet x.x.x.x
    expect "username"
    send "user\r"
    expect "password"
    send "pw\r"
    expect "model"
    send "copy tftp:something\r"
    expect "(y/n)"
    send "y\r"
    expect eof
END_EXPECT
exit 0
...