2010-10-05 9 views
11

Ho il mio programma che genera alcuni dati. Emette tutto su un errore standard.Come reindirizzare l'output del programma in un editor?

Ora mi piacerebbe reindirizzare l'output a un editor di testo appena avviato, nella finestra principale di modifica senza nome che viene visualizzata all'avvio. Ho provato con vim e gedit senza successo.

myprogram | gedit 
myprogram | gvim 

Chiunque sa di un editor di testo X11 che supporterebbe questo?

risposta

16

Se si desidera reindirizzare stderr del vostro programma per gvim si può fare:

myprogram 2>&1 | gvim - 

e nel caso in cui, se si desidera reindirizzare il stdout per l'editor si può fare:

myprogram| gvim - 
+1

Sì, '-' è presente in molti programmi per STDIN/STDOUT anziché un file. – eumiro

+0

Non è nemmeno "stderr" quello che voglio. Semplicemente 'stdout'. Com'è possibile che non volessi usare il file '-'! La risposta è semplicemente 'mioprogramma | gvim -'. –

2

Non conosco alcun editor che supporti questo, ma il reindirizzamento a un file temporaneo potrebbe essere più semplice.

F=$(mktemp) 
myprogram >$F 
gedit $F 
rm $F 
8

Ho provato questo in Ubuntu 12.04, funziona come desiderato:

sudo lshw | gedit & 

Su Ubuntu 14,04

sudo lshw | gedit - & 
+0

Ulteriori informazioni: questa è una nuova funzionalità di Gedit. È stato introdotto nella versione fornita con Gnome 3.0. Vedi https://bugzilla.gnome.org/show_bug.cgi?id=121891. – Lii

+2

Penso che hai ancora bisogno di dash dopo gedit 'sudo lshw | gedit - & '(provato ubuntu 14.04 e solo con dash funziona) –

5

Per fare tutto questo in una sola riga con un qualsiasi editor, creare un file temporaneo, aprirlo con gedit, quindi eliminarlo una volta gedit ha aperto:

echo hello > temp ; gedit temp ; sleep 1 && rm temp &

le seguenti opere con un editor come vim, ma gedit, geany o emacs sembrano essere in grado di aprire i file di input o temporanei standard, creato da <()

vi <(echo hello)

echo hello | vi -

1
history | kate -i 

il mio editor preferito :-)

Come già detto, quando un programma non supporta tale tubazione, il modo migliore è quello di utilizzare un file temporale nella directory/tmp/che di solito viene cancellato al prossimo avvio.

history > /tmp/bflmpsvz;mcedit /tmp/bflmpsvz