Utilisation du texte de la sortie des commandes précédentes

16

EDIT Avril 2015: Si vous avez cette même question, je recommande également de consulter http://xiki.org/


Je sais que ce n'est pas ainsi que fonctionnent les terminaux, mais je souhaite souvent qu'il y ait un moyen facile d'utiliser du texte (le copier, le modifier, etc.) qui se trouve déjà dans l'historique de ma fenêtre de terminal à partir d'une sortie de commande précédente.

Je l'ai imaginé comme ça:

Je suis sur mon shell bash sur le point d'entrer une commande et je me rends compte que je dois taper quelque chose qui est déjà à l'écran quelques lignes ci-dessus. Je peux atteindre la souris et la sélectionner, mais je déteste ça. Ce que je souhaite vraiment en ce moment, c'est que tout mon terminal devienne un tampon Vim géant, tout cela: les invites, les commandes que j'ai tapées et la sortie de ces commandes. Tout. Et puis je pourrais sauter quelques lignes, peut-être éditer un peu et tirer du texte. Ensuite, revenez au mode shell bash et collez tout ce que j'ai tiré dans la ligne de commande actuelle.

Je sais qu'il y a quelques options:

  • Naturellement, dirigez le texte dont j'ai besoin directement de la sortie d'une commande vers un fichier, ou directement à la commande suivante. Mais pour cela, vous devez planifier à l'avance ou réexécuter la commande à partir de votre historique (en supposant que la sortie ne changera pas entre les invocations).

  • Pour atteindre la souris et sélectionnez le texte à copier. Lame, ennuyeux, j'aurais aimé ne pas avoir à faire ça, (ce n'est pas le site GUI stackexchange, n'est-ce pas? =)

  • Pour utiliser l'option "Exporter le texte sous ..." de mon application Mac OS X et enregistrer le texte du terminal dans un fichier. Ouvrez ensuite le fichier et travaillez avec. Presque, mais pourquoi passer par l'étape d'enregistrement dans un fichier sur le disque?

La question est donc: que faites-vous dans cette situation? Y a-t-il une astuce, un outil, une fonction shell qui pourrait être utile dans ce scénario? Vous résignez-vous simplement pour utiliser la souris ou retapez ce que vous devez taper?

Il se peut que le problème soit que je ne fasse pas les choses «à la manière Unix», mais allez, c'est 2010 et je ne peux pas facilement copier du texte à quelques lignes de mon curseur?

Sergio Acosta
la source
1
Voir aussi Comment réutiliser la dernière sortie de la ligne de commande? .
Gilles 'SO- arrête d'être méchant'
stackoverflow.com/questions/5955577/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

4

Vous pouvez utiliser un script (utilisez -f pour vous assurer qu'il videra à chaque fois) et vous pouvez avoir toutes les sorties dans un fichier.

Utilisez un multiplexeur de terminaux (écran, tmux, etc.). Par exemple, pour l'écran http://web.mit.edu/gnu/doc/html/screen_11.html#

Commande: copier Entrer en mode copie / défilement. Cela vous permet de copier le texte de la fenêtre actuelle et son historique dans le tampon de collage. Dans ce mode, un éditeur plein écran de type vi est actif, avec les commandes décrites ci-dessous.

D'autres multiplexeurs de terminaux ont certainement des capacités plus avancées.

nc3b
la source
D'accord. Je viens d'apprendre qu'un «multiplexeur de terminaux» est probablement ce dont j'ai besoin. Merci. Merci aussi pour le conseil de commande «script».
Sergio Acosta
5

Dans tmux (un multiplexeur de terminaux), vous pouvez appuyer sur Ctrl + A- [pour passer en mode tampon Vi où vous pouvez naviguer sur l'écran, faire défiler le tampon d'avant en arrière, copier du texte, etc. Le raccourci par défaut est en fait Ctrl + B- [mais c'était évidemment destiné à être reconfiguré. En outre, le mode de tampon par défaut est Emacs, mais vous pouvez le configurer pour qu'il soit Vi.

Découvrez tmux, c'est vraiment un grand multiplexeur de terminaux moderne. En plus de travailler avec le tampon, vous pouvez diviser l'écran en plusieurs fenêtres, vous connecter à la même session à partir de plusieurs terminaux, etc. Pour plus de commodité, vous pouvez même en faire votre shell de connexion si vous lui dites quel est votre shell réel.

Sur OpenBSD, tmux faisait même partie du système de base.

Voir la page de manuel de tmux pour plus de détails. Voir également les captures d'écran sur http://tmux.sourceforge.net/

zvolkov
la source
tmux est le plus cool!
gabe.
4

Dans emacs, le shell Mx gère l'édition de la sortie précédente. Vous pouvez facilement copier coller la sortie des commandes précédentes, ou n'importe quelle partie de votre tampon, comme un tampon normal. Je suis presque sûr qu'il devrait y avoir un équivalent Vim.

elmarco
la source
1
C'est très proche de ce que je veux, mais je dois déjà être dans Emacs ou Vim. +1
Sergio Acosta
Oui, ce pourrait être votre terme + shell par défaut. :) Ensuite, vous utiliseriez au minimum les touches de navigation de texte habituelles. Si vous avez appris plus de touches spéciales, les fonctionnalités suivantes d'Emacs eshellsont accessibles .
imz - Ivan Zakharyaschev
1

Comme mentionné ici, Emacs eshellpourrait être votre terme + shell par défaut. :) Ensuite, vous utiliseriez au minimum les touches de navigation de texte habituelles. Si vous avez appris plus de touches spéciales, les fonctionnalités suivantes d'Emacs eshellsont accessibles:

imz - Ivan Zakharyaschev
la source
1

Essayez d'utiliser vim comme CLI? Sélectionnez simplement la sortie à partir de quelques lignes et dirigez-la à travers:!.

Stephen M. Webb
la source
Je suis désolé, je ne te suis pas. Pouvez-vous élaborer, s'il vous plaît?
roaima