Verwenden von Text aus der Ausgabe früherer Befehle

16

BEARBEITEN April 2015: Wenn Sie die gleiche Frage haben, empfehle ich, auch http://xiki.org/ zu überprüfen.


Ich weiß, dass Terminals nicht so funktionieren, aber ich habe oft den Wunsch, dass es eine einfache Möglichkeit gibt, Text zu verwenden (kopieren, ändern usw.), der sich bereits in meinem Terminalfenster-Verlauf aus einer früheren Befehlsausgabe befindet.

Ich habe es mir so vorgestellt:

Ich bin gerade dabei, einen Befehl einzugeben, und mir ist klar, dass ich etwas eingeben muss, das bereits ein paar Zeilen darüber auf dem Bildschirm angezeigt wird. Ich kann nach der Maus greifen und sie auswählen, aber das hasse ich. Was ich mir im Moment wirklich wünsche, ist, dass mein gesamtes Terminal zu einem riesigen Vim-Puffer wird: die Eingabeaufforderungen, die von mir eingegebenen Befehle und die Ausgabe dieser Befehle. Alles. Und dann könnte ich ein paar Zeilen hochspringen, vielleicht ein wenig editieren und etwas Text ruckeln. Kehren Sie dann in den Bash-Shell-Modus zurück und fügen Sie alles, was ich gezerrt habe, in die aktuelle Befehlszeile ein.

Ich weiß, dass es einige Optionen gibt:

  • Pipe den Text, den ich brauche, direkt von der Ausgabe eines Befehls in eine Datei oder direkt zum nächsten Befehl. Dazu müssen Sie den Befehl jedoch im Voraus planen oder erneut aus dem Verlauf ausführen (vorausgesetzt, die Ausgabe ändert sich zwischen den Aufrufen nicht).

  • Um nach der Maus zu greifen und den zu kopierenden Text auszuwählen. Lahm, nervig, ich wünschte, ich müsste das nicht tun (das ist nicht die GUI-Stackexchange-Site, oder? =)

  • So verwenden Sie die Option "Text exportieren als ..." in meinem (Mac OS X) Terminal-Programm und speichern den Terminal-Text in einer Datei. Öffnen Sie dann die Datei und arbeiten Sie damit. Fast, aber warum den Schritt des Speicherns in eine Datei auf der Festplatte durchlaufen?

Die Frage ist also: Was machen Sie in dieser Situation? Gibt es einen Trick, ein Tool oder eine Shell-Funktion, die in diesem Szenario nützlich sein könnte? Geben Sie sich einfach damit ab, die Maus zu verwenden, oder tippen Sie neu, was Sie tippen müssen?

Es könnte sein, dass das Problem darin besteht, dass ich die Dinge nicht "auf die Unix-Art" mache, aber komm schon, das ist 2010 und ich kann nicht einfach Text ein paar Zeilen von meinem Cursor weg kopieren?

Sergio Acosta
quelle
1
Siehe auch Wie verwende ich die letzte Ausgabe von der Befehlszeile aus? .
Gilles 'SO- hör auf böse zu sein'

Antworten:

4

Sie könnten ein Skript verwenden (verwenden Sie -f, um sicherzustellen, dass es jedes Mal geleert wird), und Sie können die gesamte Ausgabe in einer Datei haben.

Verwenden Sie einen Terminal-Multiplexer (Screen, TMUX usw.). Zum Beispiel für den Bildschirm http://web.mit.edu/gnu/doc/html/screen_11.html#

Befehl: Kopieren Kopier- / Scrollback-Modus aufrufen. Auf diese Weise können Sie Text aus dem aktuellen Fenster und dessen Verlauf in den Einfügepuffer kopieren. In diesem Modus ist ein vi-ähnlicher Vollbild-Editor mit den unten beschriebenen Steuerelementen aktiv.

Andere Terminal-Multiplexer haben sicherlich fortgeschrittenere Fähigkeiten.

nc3b
quelle
In Ordnung. Ich habe gerade erfahren, dass ein "Terminal Multiplexer" wahrscheinlich das ist, was ich brauche. Vielen Dank. Danke auch für den "script" -Befehls-Hinweis.
Sergio Acosta
5

In tmux (einem Terminal-Multiplexer) können Sie Strg + A- [drücken, um in den Vi-Puffermodus zu wechseln, in dem Sie auf dem Bildschirm navigieren, den Puffer vor- und zurückblättern, Text kopieren usw. Die Standardverknüpfung lautet tatsächlich Strg + B- [aber das sollte offensichtlich neu konfiguriert werden. Der voreingestellte Puffermodus ist Emacs, aber Sie können ihn als Vi konfigurieren.

Schauen Sie sich tmux an, es ist wirklich ein großartiger moderner Terminal-Multiplexer. Neben der Arbeit mit Buffer können Sie den Bildschirm in mehreren Fenstern teilen, von mehreren Terminals aus eine Verbindung zu derselben Sitzung herstellen usw. Für den ultimativen Komfort können Sie ihn sogar zu Ihrer Login-Shell machen, wenn Sie ihm mitteilen, um welche Shell es sich handelt.

Unter OpenBSD wurde tmux sogar zum Bestandteil des Basissystems gemacht.

Weitere Informationen finden Sie in der Manpage zu tmux. Siehe auch Screenshots auf http://tmux.sourceforge.net/

zvolkov
quelle
tmux ist das coolste!
gabe.
4

In Emacs verarbeitet die Mx-Shell die Ausgabe der vorherigen Ausgabe. Sie können ganz einfach kopieren, vorherige Befehlsausgaben einfügen oder einen beliebigen Teil Ihres Puffers wie einen normalen Puffer. Ich bin mir ziemlich sicher, dass es ein vim-Äquivalent geben sollte.

Elmarco
quelle
1
Das kommt meinem Wunsch sehr nahe, aber ich muss schon in Emacs oder Vim sein. +1
Sergio Acosta
Ja, es könnte Ihr Standardbegriff + Shell sein. :) Dann würden Sie dort mindestens die üblichen Textnavigationstasten verwenden. Wenn Sie mehr Sondertasten gelernt haben, können Sie auf die folgenden Funktionen von Emacs eshellzugreifen .
imz - Ivan Zakharyaschev
1

Wie hier erwähnt, könnte der Emacs eshellIhr Standardbegriff + Shell sein. :) Dann würden Sie dort mindestens die üblichen Textnavigationstasten verwenden. Wenn Sie mehr Spezialschlüssel gelernt haben, können Sie auf die folgenden Funktionen von Emacs eshellzugreifen:

imz - Ivan Zakharyaschev
quelle
1

Versuchen Sie, vim als CLI zu verwenden? Wählen Sie einfach den Ausgang aus ein paar Zeilen und leiten Sie ihn durch:!.

Stephen M. Webb
quelle
Es tut mir leid, ich folge dir nicht. Können Sie das näher erläutern?
Roaima