Domanda

Voglio usare parte dell'output di un comando eseguito dalla riga di comando in un altro xterm o come parte di un comando diverso. Ad esempio:

> grep error error.log
error: can't find file ~/<some very long path>/thisfile

e voglio farlo:

>ls ~/<some very long path>/

Conosco due modi per farlo:
1. copia ~/<some very long path>/ con il mouse.
2. usa una combinazione di head / tail / awk / sed / perl / cut / etc ... per estrarre solo ciò di cui ho bisogno dall'output e quindi usa che nei backtick.

Esiste un modo per copiare il testo senza usare il mouse? L'esempio che viene in mente è la modalità visiva all'interno di VIM, ma non so come farlo all'interno di xterm.

È stato utile?

Soluzione

Puoi usare i comandi copia e incolla della schermata GNU.

Tutorial rapido:

  1. Apri schermo: screen (o screen myprog my args here)
  2. Esegui il tuo programma, producendo l'output che desideri copiare
  3. Entra in modalità copia: Control+a+[
  4. Sposta il cursore sul punto iniziale
  5. Premi Invia
  6. Sposta il cursore sul punto finale
  7. Premi Invia
  8. Incolla: Control+a+×

Lo schermo è molto più potente di quello (lo uso per tabulare diversi terminali virtuali senza la necessità di un emulatore di terminale speciale, e anche per non perdere le sessioni quando X si blocca o qualcosa del genere). Per uscire dallo schermo, basta terminare la sessione della shell o digitare Ctrl + a , Ctrl + \ .

Altri suggerimenti

Trovo che XSel sia utile in situazioni simili. È uno strumento che manipola la selezione X. Ad esempio, questo memorizzerà l'output del comando negli Appunti:

grep error error.log | xsel -bi

Puoi anche utilizzare tmux che ha funzionalità simili a screen. Una volta che sei in <=> e hai l'output che vuoi copiare, puoi fare quanto segue per copiarlo e incollarlo:

  1. Entra in modalità copia con Ctrl + B , [
  2. Sposta il cursore con i tasti freccia e quindi avvia la selezione con Ctrl + Spazio
  3. Sposta il cursore per selezionare il testo / la regione da copiare, quindi copia con Alt + W (questo ti farà uscire immediatamente dalla modalità copia)
  4. Ora puoi incollare (solo entro <=>) usando Ctrl + B , ×

Queste istruzioni presuppongono che le associazioni di tasti emacs siano abilitate. Per i collegamenti vi consulta questo confronto o segui semplicemente questa guida dettagliata.

L'OP ha detto che non voleva farlo, ma ecco un modo util di unix per farlo per i posteri. Se impari queste piccole utility unix, possono essere abbastanza potenti.

  

ls $ (dirname $ (errore grep error.log | head -1 | cut -d " " -f 5-))

nota: sintassi dalla memoria

È possibile inviare l'output direttamente allo xterm interessato utilizzando il dispositivo xterm n. Ecco il comando

xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0 

(o watever è il nome del dispositivo, puoi ottenerlo usando il comando 'w' per xterm aperto)

Provalo & amp; spero che questo possa risolvere il tuo problema.

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