Linux (zB Ubuntu) Terminal, gibt es eine Methode, um die letzte Zeile zu bekommen? Angenommen, ich tippe nach dem Zufallsprinzip einen td
Befehl ein, der nicht auf meinem System installiert ist, und erhalte eine Meldung wie die folgende. Ich hätte gerne eine "Verknüpfung", um sudo apt-get install textdraw
schnell zu laufen .
Gibt es so ein Tool oder wie kann ich die letzte Zeile ohne die Maus in die Zwischenablage kopieren?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
nichttd
. Pfeil nach oben gibt mir nur dietd
Antworten:
Wenn dir ein bisschen Obszönität nichts ausmacht (ich nicht), solltest du vielleicht den Fick verwenden , ein Tool, das genau das tut, wonach du gefragt hast.
Nun, nicht genau, aber es löst das gleiche Problem. Anstatt nur die letzte Zeile abzurufen, wird versucht, mit dem zuletzt eingegebenen Befehl übereinzustimmen.
Die im Repository gezeigten Beispiele zeigen einige der von Ihnen erwähnten Szenarien.
quelle
Die kurze Antwort: Nein, wahrscheinlich haben Sie keine verfügbare Methode, um dies zu tun.
Die lange Antwort:
vi
(bei der Ausgabe ist kein schöner zeilenorientierter Text) wäre. bash macht das sowieso nicht.In der Praxis besteht das Problem darin, andere Programme zu verwenden, um die Befehlsausgabe zu erfassen und zu bearbeiten. Aber es wird Ihr unmittelbares Problem nicht lösen.
Zum Beispiel verwende ich vi-like-emacs , um Ad-hoc-Shell-Befehle auszugeben. Wenn für diese keine weiteren Eingaben erforderlich sind, empfiehlt es sich, diese in einem Fenster auszuführen , die Ausgabe des Befehls zu erfassen und die Ausgabe nach Bedarf zu bearbeiten, um den Befehl zu verfeinern. Mit Emacs können Sie auch so etwas tun, genauso wie mit vim.
quelle
Wenn Sie diese Meldung in Ubuntu erhalten haben, nachdem Sie einen nicht vorhandenen Befehl von Bash ausgeführt haben, verwendet Ihr System wahrscheinlich die
command_not_found_handle
Funktion. Sie können es in sehen/etc/bash.bashrc
.Ein triviales Hacken kann eine Option sein: Ich habe gerade ein Skript mit dem Namen erstellt
cnfh
:Führen Sie dann den Befehl td mit folgendem Skript aus:
Verwenden von Ubuntu 14.04.2 LTS . Ich hoffe das hilft.
quelle
In tmux v2.4 und höher (seit diesem Commit https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) mit
send-keys -X
. Möglicherweise ist dies in älteren Versionen mit einer anderen Syntax möglich.In
.tmux.conf
:Kopiert
prefix+!
nun die letzte Zeile an die aktuelle Cursorposition.cursor-left
kann weggelassen werden, wenn Sie es direkt ausführen möchten, ohne return einzugeben.Hinweis : Es funktioniert nicht, wenn die letzte Zeile leer oder umbrochen ist, aber es ist in den meisten Fällen trotzdem nützlich
quelle
Wenn Sie die letzte Ausgabezeile des letzten Befehls ausführen möchten, führen Sie diesen Befehl erneut aus (da er nur eine Diagnosemeldung enthält)
Schritt für Schritt (Schicht für Schicht):
fc
(was möglicherweise für „Befehl reparieren“ steht) ist ein in die Shell integrierter Befehl für den Zugriff auf den Befehlsverlauf.-ln
l
(Kleinbuchstabe L) - L ist der vorherige Befehln
- nicht enthalten Befehl n Umbren1
(eins) - bezieht sich auf den neuesten Befehlfc -ln -1
Listet den neuesten Befehl ohne Befehlsnummer auf.$(fc -ln -1)
Führt den letzten Befehl aus.$(fc -ln -1) | tail -n 1
Führt den letzten Befehl aus und zeigt die letzte Zeile seiner Ausgabe an. Dies ist diesudo apt-get install textdraw
Zeile in Ihrem Beispiel.$($(fc -ln -1) | tail -n 1)
führt diesen Befehl aus.Sie können dies alias:
Ich überlasse es Ihnen, einen kürzeren Namen für den Alias zu wählen.
Anmerkungen:
|
,<
,>
,;
,&
, oder sogar Zitate. Wenn Sie mit komplexen Befehlen umgehen müssen, können Sie diese wahrscheinlich durch Hinzufügen eines Befehls ausführen.eval
Dies wird jedoch allgemein nicht empfohlen.tail -n 17 | head -n 1
.fc
. Beachten Sie, dassfc -ln -1
die Abkürzung für istfc -ln -1 -1
. Verwenden Sie, um den drittletzten Befehl abzurufenfc -ln -3 -3
.quelle