Utilizzo del testo dall'output dei comandi precedenti


16

EDIT Aprile 2015: se hai questa stessa domanda, ti consiglio di controllare anche http://xiki.org/


So che questo non è il modo in cui funzionano i terminali, ma mi trovo spesso a desiderare che ci sia un modo semplice di usare il testo (copiarlo, modificarlo, ecc.) Che è già nella mia cronologia della finestra del terminale da un precedente output di comando.

L'ho immaginato così:

Sono nella mia shell bash per immettere un comando e mi rendo conto di dover digitare qualcosa che è già sullo schermo poche righe sopra. Posso raggiungere il mouse e selezionarlo, ma lo odio. Quello che desidero davvero in questo momento è che tutto il mio terminale sia diventato un gigantesco buffer di Vim, tutto questo: i prompt, i comandi che ho digitato e l'output di quei comandi. Qualunque cosa. E poi potrei saltare alcune righe, magari modificarne un po 'e strappare del testo. Quindi, torna alla modalità shell bash e incolla tutto ciò che ho tirato nella riga di comando corrente.

So che ci sono alcune opzioni:

  • Naturalmente, reindirizza il testo che mi serve direttamente dall'output di alcuni comandi in un file o direttamente al comando successivo. Ma per questo devi pianificare in anticipo o rieseguire il comando dalla tua cronologia (supponendo che l'output non cambierà tra le invocazioni).

  • Per raggiungere il mouse e selezionare il testo da copiare. Lame, fastidioso, vorrei non doverlo fare, (questo non è il sito stackexchange della GUI, vero? =)

  • Per utilizzare l'opzione "Esporta testo come ..." dell'applicazione Terminale (Mac OS X) e salvare il testo del terminale in un file. Quindi apri il file e lavora con esso. Quasi, ma perché passare attraverso il passaggio del salvataggio su un file su disco?

Quindi la domanda è: cosa fai in questa situazione? C'è qualche trucco, strumento, funzionalità di shell che potrebbe essere utile in questo scenario? Ti rassegni le dimissioni per usare il mouse o digitare nuovamente tutto ciò che ti serve?

È possibile che il problema sia che non sto facendo le cose "nel modo unix", ma dai, questo è il 2010 e non riesco facilmente a copiare del testo a poche righe di distanza dal mio cursore?



Risposte:


4

Puoi usare lo script (usa -f per assicurarti che si scarichi ogni volta) e puoi avere tutto l'output in un file.

Utilizzare un multiplexer terminale (schermo, tmux ecc.). Ad esempio, per lo schermo http://web.mit.edu/gnu/doc/html/screen_11.html#

Comando: copia Entra nella modalità copia / scorrimento. Ciò consente di copiare il testo dalla finestra corrente e la sua cronologia nel buffer di incollaggio. In questa modalità è attivo un editor a schermo intero simile a vi, con i controlli come indicato di seguito.

Altri multiplexer terminali hanno sicuramente funzionalità più avanzate.


Ok. Ho appena imparato che un "terminale multiplexer" è probabilmente quello di cui ho bisogno. Grazie. Inoltre, grazie per il suggerimento sul comando 'script'.
Sergio Acosta,

5

In tmux (un multiplexer terminale) puoi premere Ctrl + A- [per passare alla modalità buffer Vi dove puoi navigare nello schermo, scorrere avanti e indietro il buffer, copiare il testo ecc. Il collegamento predefinito è in realtà Ctrl + B- [ma questo ovviamente doveva essere riconfigurato. Inoltre, la modalità buffer predefinita è Emacs ma è possibile configurarla come Vi.

Dai un'occhiata a TMux, è davvero un grande moderno multiplexer terminale. Oltre a lavorare con il buffer, puoi dividere lo schermo in più finestre, connetterti alla stessa sessione da più terminali, ecc. Per la massima praticità puoi persino renderlo la tua shell di accesso se gli dici qual è la tua vera shell.

Su OpenBSD tmux è stato addirittura inserito nel sistema di base.

Vedi la pagina man per tmux per maggiori dettagli. Vedi anche screenshot su http://tmux.sourceforge.net/


tmux è il più bello!
gabe.

4

In emacs, la shell Mx gestisce l'edizione dell'output precedente. Puoi facilmente copiare incollare l'output dei comandi precedenti o qualsiasi parte del buffer, come un normale buffer. Sono abbastanza sicuro che ci dovrebbe essere un equivalente vim.


1
È molto vicino a quello che voglio, ma devo già essere in Emacs o Vim. +1
Sergio Acosta,

Sì, potrebbe essere il termine predefinito + shell. :) Quindi useresti il ​​solito testo navigando i tasti lì come minimo. Se hai appreso più chiavi speciali, puoi accedere alle seguenti funzionalità di Emacseshell .
imz - Ivan Zakharyaschev,



1

Prova a usare vim come CLI? Basta selezionare l'output da alcune righe e passare attraverso:!.


Mi dispiace, non ti seguo. Puoi elaborare, per favore?
roaima,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.