Pregunta

Estoy tratando de capturar la salida de un script de instalación (que usa scp) y registrarlo. Sin embargo, no obtengo todo lo que scp está imprimiendo, a saber, la barra de progreso.

salida de pantalla:

  

Copiando   / user2 / cdb / builds / tmp / uat / myfiles / * to   servidor / usuarios / myfiles como cdb

     

contraseña del servidor cdb @:   myfile 100% | ***************************** | 2503 00:00

salida de registro:

  

Copiando   / user2 / cdb / builds / tmp / uat / myfiles / * to   servidor / usuarios / myfiles como cdb

Realmente me gustaría saber que mi archivo llegó allí. Esto es lo que estoy tratando ahora en vano:

  

myscript.sh 2 > & amp; 1 | tee mylogfile.log

¿Alguien tiene una buena manera de capturar la salida scp y registrarla?

Gracias.

¿Fue útil?

Solución

Parece que simplemente falta saber si el scp tuvo éxito o no del registro.

¿Supongo que la barra de desplazamiento no se imprime en stdout y usa ncurses o algún otro tipo de TUI?

Podrías mirar el valor de retorno de scp para ver si fue exitoso. Me gusta

scp myfile user@host.com:. && echo success!

man scp dice

scp exits with 0 on success or >0 if an error occurred.

Otros consejos

scp imprime su barra de progreso en la terminal usando códigos de control. Detectará si redirige la salida y, por lo tanto, omite la barra de progreso.

Puede evitar eso engañando a scp para que piense que se ejecuta en una terminal usando el " script " comando que está instalado en la mayoría de las distribuciones por defecto:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt

El contenido de test.txt será:

file    0%    0     0.0KB/s   --:-- ETA
file   18%   11MB  11.2MB/s   00:04 ETA
file   36%   22MB  11.2MB/s   00:03 ETA
file   54%   34MB  11.2MB/s   00:02 ETA
file   73%   45MB  11.2MB/s   00:01 ETA
file   91%   56MB  11.2MB/s   00:00 ETA
file  100%   61MB  10.2MB/s   00:06

... que es probablemente lo que quieres.

Me topé con este problema al redirigir la salida de un script interactivo a un archivo de registro. No tener los resultados en el registro no fue un problema, ya que siempre puede evaluar los códigos de salida. Pero realmente quería que el usuario interactivo viera la barra de progreso. Esta respuesta resuelve ambos problemas.

Tal vez pueda usar la secuencia de comandos ' 'para iniciar sesión en la terminal.

scp myfile user@host.com:. && echo success! 

es muy útil, pero para escribir el mensaje en un archivo de registro lo cambié así

scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1

y esto escribirá "¡myfile se copió correctamente!" mensaje al archivo de registro.

Prueba:

scp server:/file /tmp/ > /dev/tty

No puedo comentar todavía :( así que agregaré una actualización aquí ...

@Martin tenía la mejor solución para mí, aunque si su comando scp está en la mitad de su secuencia de comandos, su salida puede aparecer después de los comandos que realmente se ejecutaron después.

Creo que eso se debe a que el script debe ejecutar el comando en una subshell, pero aún no lo he probado.

EDITAR: de hecho genera un shell, por lo que si necesita que las cosas se ejecuten (y de hecho fallen) de manera secuencial (como en un script de compilación), entonces tendría que agregar algo de lógica en torno al uso del comando de script.

es decir

script -q -c " su comando " & amp; & amp; dormir 1

o algo similar para que su caparazón principal espere a que termine el caparazón secundario antes de continuar.

sí, recientemente estaba tratando de obtener resultados dentro de un script php de proc_open () Perdí un momento tranquilo tratando de obtener salida :-) pero es un poco tarde aquí y luego leer esta publicación aquí me hizo darme cuenta de que realmente no necesito esta salida basura para mi script

solo el código de salida hará el trabajo :-)

$ exit_code = proc_close ($ proceso);

$ grep -r "Error" xyz.out > abc.txt

Aquí, en el comando anterior, estoy almacenando la salida en el archivo abc.txt.

Este comando grep es para buscar texto que contenga Error en el archivo xyz.out y almacenar la salida en abc.txt sin mostrar en la consola.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top