Quiero usar expect
para ejecutar un comando simple cat /tmp/id_rsa.pub
sobre ssh.use expect to spawn comando con argumentos que contienen espacios
En una cáscara, que puede ejecutar este wo problema, (con poner manualmente la contraseña)
ssh [email protected] 'cat /tmp/id_rsa.pub'
quiero para automatizar esto con expect
. Mi escritura es expect
,
#!/usr/bin/expect
eval spawn ssh [email protected] 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof
Se lanza el error bash: cat /tmp/id_rsa.pub: no such file or directory
. me parece muy extraño. ¿Cuál podría ser la posible causa?
Editar: después de algunas pruebas, me parece que esto es común, no solo en el caso de cat
. Si el argumento para generar el comando es con espacio (incluso si está en las comillas), tendrá un problema. Por ejemplo, la sustitución de cat /tmp/id_rsa.pub
con otros comandos con espacios, como
eval spawn ssh [email protected] 'which java'
se queja con bash: which java: command not found
. Pero si va a cambiar eso con pwd
, como
eval spawn ssh [email protected] 'pwd'
que funcione bien.
¿Ha intentado eliminar las comillas simples alrededor de 'argumento de comando'? Parece que la raíz del problema es que está tratando de interpretar toda la cadena entrecomillada como el nombre de un comando, en lugar de dividirla en comando y argumentos ... – twalberg
@twalberg que está funcionando. También intenté comillas dobles, wo/problema también. Solo por curiosidad, ¿puedes explicar un poco qué hay de especial en las comillas simples? – Richard
Tendría que desenterrar los documentos 'expect' para ver lo que dice, no lo sé por la parte superior de mi cabeza. Sugerí que basándome en la sintaxis del mensaje de error en particular que recibía ... – twalberg