Come catturare un log stampato da 'gnome-terminal -x'?

2

Quando invio il comando sudo fio myjog | tee mylog in una finestra di terminale, Posso salvare il fio log nel file mylog .

Ma se emetto il comando sudo gnome-terminal -x sudo fio myjog | tee mylog , il file mylog verrà creato senza alcun testo all'interno.

Come catturare un registro stampato da gnome-terminal -x ?

    
posta Lenny 08.10.2015 - 09:23

2 risposte

3

Ogni comando eseguito nella riga di comando è, nell'ordine:

  • interpretato dalla shell;
  • interpretato dall'eseguibile;

In questo caso | rende la shell interpretare sudo gnome-terminal -x sudo fio myjog | tee mylog come due comandi collegati tra loro ( sudo gnome-terminal -x sudo fio myjog e tee mylog , il primo con pipe al secondo).

Il risultato è che l'output di sudo gnome-terminal -x sudo fio myjog viene convogliato su tee mylog ; poiché gnome-terminal non produce nulla, mylog è vuoto.

Utilizza l'opzione -e per passare il comando da eseguire come argomento;

I comandi passati attraverso le opzioni -e vengono eseguiti in sh ;

In questo caso, dal momento che si desidera utilizzare una pipe, che è una funzione bash (e altre shell), è necessario eseguire esplicitamente il comando in bash (su una nota a margine: non si? t necessario sudo per eseguire gnome-terminal se si intende utilizzare sudo nell'argomento per le opzioni -x / -e ):

gnome-terminal -e "bash -c \"sudo fio myjog | tee mylog\""
    
risposta data kos 08.10.2015 - 09:41
2

Chiedi a gnome-terminal di eseguire bash con un comando specifico. Ad esempio,

gnome-terminal -x bash -c " printf "YOLO"; sleep 5 " 

Nel tuo caso, fallo

gnome-terminal -x bash -c "sudo fio myjog | tee mylog"

Alternativa,

chiedi script comando per registrare l'output anziché tee . Esempio,

gnome-terminal -x script -c "sudo apt-get update" myLog 
    
risposta data Sergiy Kolodyazhnyy 08.10.2015 - 10:04

Leggi altre domande sui tag