Czy ktoś może mi powiedzieć, jak wykonywać sudo
polecenia expect
? Próbowałem następujące, ale to nie działa. Czy ktoś może mi zasugerować?
set login "sasuke"
set addr "hostname"
set pw "mypasswd"
spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
send "output=$(sudo virsh list --all | awk "/running/{print \$2}" | tail -2); sudo virsh dominfo $output"
expect "password:"
send "$pw\r"
expect "#"
Kiedy wypróbowałem poniższy skrypt, wykonałem go bez błędów, ale nie otrzymałem danych wyjściowych. Oto skrypt i dane wyjściowe po uruchomieniu. Gdzie popełniam błąd?
set login "sasuke"
set addr "hostname"
set pw "mypasswd"
spawn ssh $login@$addr
expect "$login@$addr's password:"
send "$pw\r"
expect "#"
send {output=$(sudo virsh list --all | awk '/running/{print $2}' | tail -2)}
expect {
password: {send "$pw\r"; exp_continue}
"#"
}
send {sudo virsh dominfo "$output"} ;# don't know if you need quotes there
expect {
password: {send "$pw\r"; exp_continue}
"#"
}
Wykonanie
sasuke@njob:~$ ./hypr.sh
spawn ssh sasuke@hostname
sasuke@hostname's password:
sasuke@hostname:~$ output=$(sudo virsh list --all | awk '/running/{print $2}' | tail -10)sudo virsh dominfo '$output' sasuke@njob:~$
exp_internal 1
na górę skryptu i przeczytaj pełne dane wyjściowe.Chciałbym podzielić się moim scirptem. Próbowałem tego na swoim systemie. to działa dobrze.
źródło
Spróbuj zakończyć to poleceniem „interakcji”, które powinno działać.
źródło
Myślę, że możesz potrzebować odwrotnego ukośnika w cudzysłowie. W przeciwnym razie
expect
uważa, że polecenie kończy się po „awk”:źródło