Кто-нибудь может дать мне знать, как выполнять sudo
команды с expect
? Я попробовал следующее, но это не работает. Кто-нибудь может дать мне предложение, пожалуйста?
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 "#"
Когда я попробовал приведенный ниже скрипт, он выполнялся без ошибок, но я не получил вывод. Вот сценарий и вывод, когда он выполняется. Где я здесь ошибаюсь?
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}
"#"
}
выполнение
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
в начало сценария и прочитайте подробный вывод.Я хотел бы поделиться своим Scirpt. Я попробовал это в моей системе. это работает нормально.
источник
Попробуйте завершить его командой «взаимодействовать», это должно работать.
источник
Я думаю, что вам может понадобиться поставить обратную косую черту в кавычках. В противном случае
expect
думает, что команда заканчивается после "awk":источник