Meine Antwort bietet einen einfachen Befehl in drei verschiedenen Syntaxen, die alle gleich funktionieren, aber eine ist etwas kürzer und einfacher zu tippen als die zweite. Die dritte Variante ist ein sogenannter Alias, dh Sie können dem Befehl einen benutzerdefinierten Namen zuweisen und ihn aufrufen, indem Sie diesen ausführen, ohne sich an die komplexen Dinge erinnern zu müssen.
Vorbereitung:
Installieren Sie zunächst das Paket xsel
, mit dem Sie vom Terminal aus auf die X-Zwischenablage zugreifen können:
sudo apt-get install xsel
Befehlsvariante 1 (kurz):
Danach können Sie die folgende Zeile eingeben, um den vorherigen Befehl in die Zwischenablage zu kopieren:
xsel -ib <<<!!:q
Wenn Sie den zweitletzten Befehl kopieren möchten, ersetzen Sie ihn !!
durch !-2
, für die drittletzte Verwendung !-3
usw.
Um zu erklären, was Sie gerade ausführen, hier eine kurze Aufschlüsselung des Befehls:
xsel
ist ein Befehlszeilentool für den Zugriff auf die X-Zwischenablage.
Weitere Informationen finden Sie in der Manpage online oder durch Ausführen man xsel
.
- Der
-i
Parameter fordert xsel
zum Lesen von der Standardeingabe auf (normalerweise bedeutet dies Tastatureingabe, aber wir leiten hier etwas um)
- Der
-b
Parameter gibt an, dass die Zwischenablage anstelle der "primären" oder "sekundären" Auswahl von X verwendet werden soll.
<<<
ist eine spezielle Bash-Syntax namens "Here String".
Grundsätzlich wird das Argument (nur eines!) Danach erweitert (nicht ausgewertet!) Und als String an die Standardeingabe des Befehls weitergeleitet, bevor / nach dem es steht.
!!:q
wird als "Knallbefehl" für die Erweiterung der Historie in Bash bezeichnet. Es ersetzt sich durch eine zuvor eingegebene Befehlszeile.
Weitere Informationen finden Sie in der lokalen Manpage, indem Sie sie ausführen man history
(die Online-Manpage ist nicht hilfreich).
- Das
!!
steht für die vorherige Kommandozeile und ist ein Synonym für !-1
.
Offensichtlich !-2
bedeutet das dann die vorletzte Kommandozeile. Vergessen Sie nicht das Minuszeichen -
, sonst wird der 2. (3. / ...) Befehl zurückgegeben, den Sie jemals eingegeben haben.
- Das
:q
ändert den Befehl bang und weist bash an, die Ersetzung in einfache Anführungszeichen ( '
) zu setzen, um eine weitere Erweiterung durch die Shell zu verhindern.
Befehlsvariante 2 (etwas länger):
echo !!:q | xsel -ib
echo
hat die einfache Aufgabe, alle Argumente auf die Standardausgabe des Terminals zu drucken.
!!:q
wird ein "Knallbefehl" für die Erweiterung der Historie in Bash genannt. Es ersetzt sich durch eine zuvor eingegebene Befehlszeile.
- Das
!!
steht für die vorherige Kommandozeile und ist ein Synonym für !-1
. Offensichtlich !-2
heißt dann die vorletzte Kommandozeile. Vergessen Sie nicht das Minuszeichen -
, sonst wird der 2. (3. / ...) Befehl zurückgegeben, den Sie jemals eingegeben haben.
- Das
:q
ändert den Befehl bang und weist bash an, die Ersetzung in einfache Anführungszeichen ( '
) zu setzen, um eine weitere Erweiterung durch die Shell zu verhindern.
|
ist eine Pfeife. Er leitet die Terminalausgabe ("stdout") des Befehls vor dem Befehl an die Terminaleingabe ("stdin") des Befehls nach dem Befehl weiter.
xsel
ist ein Befehlszeilentool für den Zugriff auf die X-Zwischenablage.
Weitere Informationen finden Sie in der Manpage online oder durch Ausführen man xsel
.
- Der
-i
Parameter fordert xsel
zum Lesen von der Standardeingabe auf (normalerweise bedeutet dies Tastatureingabe, aber wir leiten hier etwas um)
- Der
-b
Parameter gibt an, dass die Zwischenablage anstelle der "primären" oder "sekundären" Auswahl von X verwendet werden soll.
Befehlsvariante 3 (Alias):
Ein Bash-Alias ist eine coole Sache, wenn Sie sich nicht an lange oder komplizierte Befehle erinnern möchten, die Sie häufig verwenden. Sie können diesen Befehl einem einfachen Aliasnamen zuweisen, den Sie anstelle des langen Befehls ausführen können, um dasselbe zu erreichen.
Da Bang-Befehle eine spezielle Bash-Funktion sind und vor dem Auflösen von Aliasen erweitert werden, können Sie eine der oben genannten Variationen nicht einfach als Alias kennzeichnen, da das !!
Teil nicht funktioniert. Es gibt jedoch eine Problemumgehung.
Führen Sie zum Festlegen des Alias die folgende Zeile in Ihrem Terminal aus. Beachten Sie, dass Sie einen beliebigen gültigen Bash-Variablennamen anstelle von copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Dies ist jedoch nur für Ihre aktuelle Bash-Sitzung so, dass der Alias verschwindet, nachdem Sie das Terminalfenster geschlossen haben. Sie können es in jeder Ihrer Bash-Sitzungen persistent machen, indem Sie diese Zeile oben am Ende Ihrer ~/.bashrc
Datei oder in Ihre ~/.bash_aliases
Datei einfügen, falls Sie eine haben.
Wieder eine kurze Pause von der Linie:
alias name='command'
ist die Syntax zum Festlegen eines Alias in Bash. Der command
wird immer dann ausgeführt, wenn Sie ihn name
von nun an ausführen .
history -p \!\!
gibt die zuvor ausgeführte Kommandozeile an stdout aus (Standardausgabe). Ohne den -p
Schalter würde der Befehl nicht nur gedruckt, sondern auch erneut ausgeführt.
Beachten Sie, dass wir die Bangs ( !
) mit Backslashes ( \
) umgehen müssen , da Bash sie sonst erweitern würde, wenn wir versuchen, den Alias festzulegen. Dies macht keinen Sinn, da sie so im Alias sein müssen, wie sie sind.
Sie können auch hier den [n] -ten Befehl angeben, indem Sie den zweiten Knall durch -n
z \!-2
.
|
ist eine Pfeife. Es leitet die Standardausgabe ("stdout") des Befehls vor dem Befehl an den Terminalstandard ("stdin") des Befehls nach dem Befehl um.
xsel
ist ein Befehlszeilentool für den Zugriff auf die X-Zwischenablage.
Weitere Informationen finden Sie in der Manpage online oder durch Ausführen man xsel
.
- Der
-i
Parameter fordert xsel
zum Lesen von der Standardeingabe auf (normalerweise bedeutet dies Tastatureingabe, aber wir leiten hier etwas um)
- Der
-b
Parameter gibt an, dass die Zwischenablage anstelle der "primären" oder "sekundären" Auswahl von X verwendet werden soll.
<<<"!!" xsel -ib