es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enviar comando después de ejecutar.

Soy un traductor de español que traduce documentos de IT. Traduzco lo siguiente al español. No traduzcas el código ni la salida en Markdown.

Estoy tratando de copiar un archivo desde mi Raspberry Pi a mi computadora con scp y automatizarlo con expect.

Mi solución actual se ve así:

#!/usr/bin/expect

exec scp pi@ip_address:/home/pic.jpg pic.jpg

expect "*assword: "
send "raspberry\r" # Contraseña para Raspberry Pi

La primera línea funciona bien. Sin embargo, la contraseña no se pasa y tengo que escribirla manualmente.

¡Agradecería si alguien pudiera ayudarme!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en bash, Raspberry Pi, expect y scp, puedo sugerir la siguiente solución:

    #!/usr/bin/expect
    
    set password "raspberry"
    set ip_address "X.X.X.X"
    set file_path "/home/pi/pic.jpg"
    set destination "/path/to/destination/on/local/machine"
    
    spawn scp pi@$ip_address:$file_path $destination
    expect {
        "*assword*" {
            send "$password\n"
            exp_continue
        }
        "*yes/no*" {
            send "yes\n"
            exp_continue
        }
        "100%" {
            exit 0
        }
    }
    

    Este es un script de expect que automatizará la transferencia de archivos desde tu Raspberry Pi a tu computadora usando SCP. Algunas cosas a tener en cuenta:

    • He añadido variables para la contraseña, dirección IP, ruta del archivo y ruta de destino para hacer el script más flexible y reutilizable.
    • El comando spawn inicia el proceso de SCP en una nueva shell.
    • El bloque expect espera patrones específicos en la salida del proceso de SCP:
      • Si encuentra un mensaje para ingresar la contraseña (*assword*), envía la contraseña seguida de un carácter de nueva línea (\n). El comando exp_continue significa que seguirá esperando más patrones en la salida.
      • Si encuentra un mensaje para aceptar la clave del host remoto (*yes/no*), envía “yes\n” y continúa esperando más patrones.
      • Si encuentra “100%”, significa que la transferencia de archivos se ha completado y el script finaliza con un código de estado 0 (éxito).

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta.

Comments are closed.