스위치의 arp 테이블을 긁어내는 다음 스크립트가 있습니다. 내가 어떻게 모든 것을 피하려고 시도하든, 인용하거나 그렇지 않으면 제대로 작동하지 않습니다. bash 라인은 Expect 인터프리터로 전달되기 전에 내 쉘에서 해석됩니다. bash 줄을 문자 그대로 전달하여 스위치가 실행되도록하고 싶지만 어떻게 든 $ thirdoctet 변수를 확장해야하고 ssh @ {ip}을 확장하고 싶습니다.
Arista의 bash는 변수 설정을 좋아하지 않는 것 같습니다. 내부에서 thirdoctet = 3을 정의 할 수 없었습니다.
function get-arp {
echo ${ip}
/usr/bin/expect > arista-arp-dump-${ip} << EOF
spawn ssh admin@${ip}
expect "assword: "
send "password\r"
expect "localhost>"
send "bash for i in `seq 1 5`; do ping -c 1 10.$thirdoctet.1.$i; done"
expect "localhost>"
send "bash for i in `seq 10 19`; do ping -c 1 10.$thirdoctet.1.$i; done"
expect "localhost>"
send "show ip arp\r"
expect "localhost>"
send "exit\r"
expect "eof"
EOF
tail -n +2 arista-arp-dump-${ip} | grep b8ae | awk '{print $1,$3}' | tr ' ' ',' > arista-arp.csv
sed 's/\(.*\)\./\1 /' arista-arp.csv > tmp && mv tmp arista-arp.csv
sed 's/\(.*\)\./\1 /' arista-arp.csv > tmp && mv tmp arista-arp.csv
sed '/^$/d;s/[[:blank:]]//g' arista-arp.csv > tmp && mv tmp arista-arp.csv
rm arista-arp-dump-${ip}
}
get-arp
스크립트에서는 작동하지 않습니다. arista CLI에서 해당 bash 명령을 직접 실행하면 의도 한대로 작동합니다.
—
Brando__
말 그대로
—
G-Man
bash
(공백) for
(공백) i
...?
i에 대한 localhost # bash
—
Brando__
seq 1 5
; ping -c 1 10.199.1. $ i; PING 10.199.1.1 (10.199.1.1) 56 (84) 바이트의 데이터를 완료했습니다. 10.199.1.1에서 64 바이트 : icmp_req = 1 ttl = 64 시간 = 2.03ms --- 10.199.1.1 핑 통계 --- 1 개의 패킷 전송, 1 개의 수신, 0 % 패킷 손실, 시간 0ms rtt min / avg / max / mdev = 2.032 / 2.032 / 2.032 / 0.000 ms PING 10.199.1.2 (10.199.1.2) 56 (84) 바이트의 데이터. 10.199.1.2에서 64 바이트 : icmp_req = 1 ttl = 64 time = 2.76ms .... localhost 예, 작동합니다.
(1) 좋아, 나는 조금 놀랐다. 그러나 나는 그것을 당신의 말로 받아 들일 것이다. (2) 힌트 : 의견에 여러 줄로 표시해야하는 내용을 게시하지 마십시오.
—
G-Man
`
방법을 알기 전까지는 주석에 포함 된 내용을 게시하지 마십시오 . (3) 당신은 아마도 문제가있을 것입니다 $
(그러나 당신은 이미 알고 있지 않습니까?) 당신은 간단한 것을 bash for i in 1 2 3 4 5 6 7 8; do echo buffalo; done
통해 할 수 있습니까 expect
?
send "bash for i in ...
입니까? 그런 일을 해 본 적이 있습니까? 그렇게하는 스크립트를 시도하십시오.