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
<<<
Struktur erneut aufgerufen wird? Und ich denke, es<<<!!:q xsel -ib
ist besser (lassen Sie das History-Bang-Kommando zitieren), oder sind Sie anderer Meinung?!!:q
nutzt einfache Anführungszeichen ('
) ...<<<"!!" xsel -ib
. Ja,<<<!!:q xsel -ib
ist besser, mach es.xsel
hat interessante SyntaxSie können verwenden
xclip
:Also in deinem Fall:
c
steht für Zwischenablage.Möglicherweise müssen Sie
xclip
zuerst installieren :BEARBEITEN:
Wenn Sie nur den von Ihnen eingegebenen Befehl (nicht die Ausgabe) in die Zwischenablage kopieren möchten, können Sie Here-Zeichenfolgen verwenden:
Oder eine Pfeife:
quelle
echo "command" | xclip -selection clipboard
... Oder macht es zu einem Skript unter~/.bin
:echo "$@" | xclip -selection clipboard
. Angenommen, Sie speichern es als "cpy", dann könnten Siecpy youtube-dl stuff
und es würde in die Zwischenablage kopiert, ohne ausgeführt zu werden.echo "$@" | xclip -selection c && $@
oder etwas Klügeres mit eval ...Ich habe gerade ein kleines Skript dafür erstellt
zsh
, dasxclip
dies ermöglicht:Dieses Skript kopiert den letzten Befehl, der in der Shell / im Terminal eingegeben wurde, in die Zwischenablage des Systems. Auf einem typischen Remote-Server würde das nicht funktionieren.
Ich dachte, ich würde nur ein paar Minuten brauchen, um dieses Drehbuch zu schreiben, aber es dauerte überraschend lange, bis es funktionierte, als ich über den Umgang
zsh
mit der Geschichte stolperte .Die
tail -n 2
und Erstensed
befassen sich mit der Tatsache, dass der Befehl für dieses Skript selbst im Verlauf aufgezeichnet wird und daher zwei Zeilen des Verlaufs abruft und die letzte entfernt.Dieses Skript funktioniert, und es war eine Art lustiges Puzzle, aber ich bin wirklich gespannt, ob es eine einfachere oder elegantere Art gibt, dies zu tun
zsh
.quelle
tail
undsed
in ein oder zwei Befehle vereinfachen . Diejenigen Befehle verwenden ,!!
die erklärt hier - es sollte in ZSH .... verfügbar sein!!
Tat sieht es so aus, als wäre es hier hilfreich, danke!Ich benutze als Zwischenablage-Manager, so.
Letzter Befehl in die Zwischenablage
Zwischenablage zum Verkratzen
ZSH spezifisch
Ich denke, diese Ideen können Ihnen helfen, Ihre eigene Lösung zu erstellen
quelle