Как заменить AND (&&) в цикле for?

На странице руководства 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"}
}
24
22.12.2017, 15:19
2 ответа

Если вам нужно грязное однострочное решение, вы можете создать команду и отправить ее в bash.

echo "cmd "{1..20}" &&" : | bash
9
27.01.2020, 19:40

Вот как я выполняю свои задачи в терминале без использования &&

 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

0
27.01.2020, 19:40

Теги

Похожие вопросы