Question

Je souhaite utiliser une partie du résultat d'une commande exécutée à partir de la ligne de commande dans un autre xterm ou dans le cadre d'une autre commande. Par exemple:

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

et je veux faire ceci:

>ls ~/<some very long path>/

Je connais deux façons de procéder:
1. copier ~/<some very long path>/ avec la souris.
2. utilisez une combinaison de head / tail / awk / sed / perl / cut / etc ... pour extraire uniquement ce dont j'ai besoin de la sortie, puis utilisez backticks à l'intérieur.

Est-il possible de copier du texte sans utiliser la souris? L’exemple qui me vient à l’esprit est le mode visuel dans VIM, mais je ne sais pas comment le faire dans xterm.

Était-ce utile?

La solution

Vous pouvez utiliser les commandes copier et coller de l'écran GNU.

Didacticiel rapide:

  1. Ouvrir l'écran: screen (ou screen myprog my args here)
  2. Exécutez votre programme en produisant le résultat que vous souhaitez copier
  3. Entrer en mode copie: Contrôler + a + [
  4. Déplacez le curseur sur le point de départ
  5. Hit Entrez
  6. Déplacez votre curseur jusqu'au point final
  7. Hit Entrez
  8. Coller: Contrôle + a + ]

Screen est beaucoup plus puissant que cela (je l’utilise pour intercaler plusieurs terminaux virtuels sans avoir besoin d’un émulateur de terminal spécial, mais aussi pour ne pas perdre mes sessions lorsque X se bloque ou quelque chose du genre). Pour sortir de l'écran, terminez simplement votre session shell ou tapez Ctrl + a , Ctrl + \ .

Autres conseils

Je trouve que XSel est utile dans des situations similaires. C'est un outil qui manipule la sélection X. Par exemple, ceci stockera la sortie de votre commande dans le presse-papier:

grep error error.log | xsel -bi

Vous pouvez également utiliser tmux qui a fonctionnalités similaires à screen. Une fois que vous êtes dans <=> et que vous avez le résultat que vous souhaitez copier, vous pouvez procéder comme suit pour le copier puis le coller:

  1. Passez en mode copie avec Ctrl + B , [
  2. Déplacez le curseur avec les touches fléchées, puis démarrez la sélection avec Ctrl + Espace
  3. Déplacez le curseur pour sélectionner le texte / la région à copier, puis copiez-le avec Alt + W (cela vous fera immédiatement quitter le mode copie)
  4. Vous pouvez maintenant coller (au sein de <=> uniquement) à l'aide de Ctrl + B , ]

Ces instructions supposent que les raccourcis clavier emacs sont activés. Pour les liaisons vi , consultez cette comparaison ou suivez simplement ce guide pas à pas.

L’opérateur a déclaré qu’il ne voulait pas faire cela, mais voici un moyen unifié de le faire pour la postérité. Si vous apprenez ces petits utilitaires Unix, ils peuvent être assez puissants.

  

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

note: syntaxe de la mémoire

Vous pouvez envoyer une sortie directement au xterm concerné en utilisant le périphérique xterm no. Voici la commande.

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

(ou watever est le nom du périphérique, vous pouvez l'obtenir à l'aide de la commande 'w' pour xterm ouvert)

Essayez-le & amp; espérons que cela résoudra votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top