На странице руководства expect написано:
При совпадении шаблона (или eof, или full_buffer), любой совпавший и ранее не совпавший вывод сохраняется в переменной
expect_out(buffer)
.
Это означает, что вы получите только символы с момента последнего "More".
Я подозреваю, что вместо этого вам может понадобиться команда log_file
:
#!/usr/bin/expect -f
set timeout 300
set SWITCH [lindex $argv 0]
spawn ssh -o "StrictHostKeyChecking no" $SWITCH -luser
match_max 100000000
expect "*assword:"
send "password\r"
expect "*>"
log_file /some/log/file
send "show run\r"
expect {
"*More*" {send -- " ";exp_continue}
"*>" {send -- "exit\r"}
}
Если вам нужно грязное однострочное решение, вы можете создать команду и отправить ее в bash.
echo "cmd "{1..20}" &&" : | bash
Вот как я выполняю свои задачи в терминале без использования &&
for i in google.com yahoo.com;do ping -c1 $i;echo $i;done
Аналогично, вам нужно поместить эту команду в скрипт
for i in google.com yahoo.com
do echo $i;ping -c1 $i;
done
Оба дают одинаковый результат
google.com PING google.com (172.217.26.174) 56(84) байт данных. 64 байт от google.com (172.217.26.174): icmp_seq=1 ttl=56 time=259 ms
--- google.com ping statistics --- 1 пакет передан, 1 принят, 0% потери пакетов, время 0ms rtt min/avg/max/mdev = 259.794/259.794/259.794/0.000 ms yahoo.com PING yahoo.com (98.138.253.109) 56(84) байт данных. 64 байта от yahoo.com (98.138.253.109): icmp_seq=1 ttl=51 time=398 ms
--- yahoo.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 398.974/398.974/398.974/0.000 ms