Necesidad de redirigir la entrada desde un archivo y también desde el tty

Necesidad de redirigir la entrada desde un archivo y también desde el tty

Estoy ejecutando a Amanda para mis copias de seguridad. Necesito restaurar un montón de archivos de diferentes fechas. Los archivos tienen el mismo nombre, por lo que necesito realizar varias sesiones de restauración. Entonces, pensé en escribir el guión. Aquí está mi guión:

sethost myhost
setdisk /var
setdate 2017-03-25-01-30-01
cd log/httpd
ls
add ssl_request_log
extract

Ejecuto el script usando la redirección de shell:

amrecover my_Config < /home/me/thatScript

El problema es que tan pronto como amrecover ve elextractocomando me pide que confirme.

Continue? [Y/n]:

Poner "Y" en la línea después de "extraer" no funciona. Amrecover se sienta allí y espera a que escriba "Y". Me imagino que amrecover quiere la entrada del tty y no solo de la entrada estándar.

Miré la página de manual de amrecover y también busqué en Google para ver si alguien se había dado cuenta de esto. Y el código está compilado, por lo que no puedo piratear un script sin esperar la confirmación.

¿Hay alguna manera de recibir información de un script y redirigir /dev/tty a la entrada estándar?

Respuesta1

amrecoverestá pensado para ser un script interactivo, por lo que tradicionalmente se puede utilizar para automatizarlo expect. Esta tclutilidad se puede crear para verificar la conversación en busca de los dos estilos de mensaje ( amrecover>y Continue? [Y/n]:) y responderlos de manera diferente. Por ejemplo, cree un archivo myrecoveren su RUTA, hágalo ejecutable ( chmod +x myrecover) y coloque lo siguiente en él:

#!/usr/bin/expect
spawn amrecover my_Config 
expect   -ex {Continue? [Y/n]:}  { send "y\r"; exp_continue } \
         -ex {amrecover>}        { gets stdin input; 
               if ![eof stdin] { send $input; send "\r"; exp_continue } }
close
wait

Luego ejecútelo como

./myrecover </home/me/thatScript

El expectscript se bifurca y ejecuta su comando amrecover my_Config, conectándose a él a través de un pty, luego escucha la entrada en busca de las dos indicaciones. Cuando aparece el mensaje habitual amrecover>, leemos una línea de la entrada estándar del expectscript, es decir, su conjunto de comandos, y (si no obtuvimos el final del archivo) enviamos esa línea al programa, con una nueva línea ( \rse convierte a esto). Esto exp_continuehace que el comando se repita nuevamente para la siguiente coincidencia de mensaje. Al final del archivo cerramos la conexión con el programa y esperamos a que salga.

Tenga en cuenta que ejecutar amandade esta manera puede causar estragos si el mensaje de continuación es por alguna condición excepcional, etc.

Respuesta2

Proporcione la entrada a la extractutilidad a través de heredoccomo se muestra:

extract - <<\__DATA__
Y
__DATA__

información relacionada