Domanda

Sto cercando di acquisire l'output da uno script di installazione (che utilizza scp) e registrarlo. Tuttavia, non sto ottenendo tutto ciò che scp sta stampando, vale a dire la barra di avanzamento.

output dello schermo:

  

Copia   / user2 / cdb / builds / tmp / uat / myfiles / * a   server / utenti / file personali come cdb

     

password cdb @ server:   myfile 100% | ***************************** | 2503 00:00

output del registro:

  

Copia   / user2 / cdb / builds / tmp / uat / myfiles / * a   server / utenti / file personali come cdb

Mi piacerebbe davvero sapere che il mio file è arrivato lì. Ecco cosa sto provando ora inutilmente:

  

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

Qualcuno ha un buon modo per catturare l'output di scp e registrarlo?

Grazie.

È stato utile?

Soluzione

Sembra che manchi se scp ha avuto successo o meno dal registro.

Suppongo che la barra di scorrimento non venga stampata su stdout e utilizzi ncurses o qualche altro tipo di TUI?

Potresti semplicemente guardare il valore di ritorno di scp per vedere se ha avuto successo. Mi piace

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

man scp dice

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

Altri suggerimenti

scp stampa la sua barra di avanzamento sul terminale usando i codici di controllo. Rileverà se reindirizzi l'output e quindi ometti la barra di avanzamento.

Puoi aggirare il problema inducendo scp a pensare che funzioni in un terminale usando lo " script " comando che è installato sulla maggior parte delle distribuzioni di default:

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

Il contenuto di test.txt sarà:

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

... che è probabilmente quello che vuoi.

Mi sono imbattuto in questo problema mentre reindirizzavo l'output di uno script interattivo in un file di registro. Non avere i risultati nel registro non è stato un problema in quanto puoi sempre valutare i codici di uscita. Ma volevo davvero che l'utente interattivo vedesse la barra di avanzamento. Questa risposta risolve entrambi i problemi.

Forse puoi usare ' script "per registrare la sessione del terminale.

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

è molto utile ma per scrivere il messaggio in un file di registro l'ho cambiato in questo modo

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

e questo scriverà " myfile copiato correttamente! " messaggio al file di registro.

Prova:

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

Non posso ancora commentare :( quindi aggiungerò un aggiornamento qui ...

@Martin aveva la soluzione migliore per me, anche se se il tuo comando scp è a metà dello script, l'output potrebbe apparire dopo i comandi effettivamente eseguiti successivamente.

Penso che sia perché lo script deve eseguire il comando in una subshell ma devo ancora testarlo.

EDIT: genera effettivamente una shell, quindi se hai bisogno di cose da eseguire (e in effetti falliscono) in modo sequenziale (come in uno script di compilazione), allora dovresti aggiungere una logica all'utilizzo del comando script.

cioè.

script -q -c " il tuo comando " & Amp; & amp; dormire 1

o qualcosa di simile in modo che la shell del genitore attenda il completamento della shell del figlio prima di andare avanti.

sì, di recente stavo cercando di ottenere l'output in uno script php da proc_open () ho perso un po 'di tempo cercando di ottenere un output :-) ma è un po 'tardi qui e poi leggendo questo post qui mi sono reso conto che non ho davvero bisogno di questo output goffo alla mia sceneggiatura

solo il codice di uscita farà il lavoro :-)

$ exit_code = proc_close ($ process);

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

Qui nel comando sopra sto archiviando l'output nel file abc.txt.

Questo comando grep è per la ricerca di testo che contiene Errore nel file xyz.out e la memorizzazione dell'output in abc.txt senza essere visualizzato sulla console.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top