¿Alguien puede decirme cómo ejecutar sudo
comandos expect
? Intenté lo siguiente pero esto no funciona. ¿Alguien puede darme una sugerencia por favor?
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 "#"
Cuando probé el siguiente script, se ejecutó sin errores, pero no obtuve el resultado. Aquí está el script y la salida cuando se ejecuta. ¿Dónde estoy cometiendo un error aquí?
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}
"#"
}
Ejecución
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
a la parte superior de la secuencia de comandos y lea la salida detallada.Me gustaría compartir mi scirpt. Intenté esto en mi sistema. Esto está funcionando bien.
fuente
Intente finalizarlo con el comando "interactuar", debería funcionar.
fuente
Creo que es posible que necesite hacer una barra diagonal inversa entre comillas. De lo contrario,
expect
piensa que el comando termina después de "awk":fuente