Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und bei Verwendung eines Terminals wieder einfügen? Zum Beispiel:
cat file | clipboard
Ich wollte das schon immer machen und fand einen schönen und einfachen Weg, es zu machen. Ich habe das gesamte Verfahren aufgeschrieben, falls es jemand anderes benötigt.
Installieren Sie zuerst ein 16-kB-Programm mit dem Namen xclip
:
Sudo apt-get install xclip
Sie können die Ausgabe dann in xclip
umleiten, um sie in die Zwischenablage zu kopieren:
cat file | xclip
Um den gerade kopierten Text einzufügen, verwenden Sie:
xclip -o
Um das Leben zu vereinfachen, können Sie wie folgt einen Alias in Ihrer .bashrc-Datei einrichten:
alias "c=xclip"
alias "v=xclip -o"
Stellen Sie sich vor, Sie möchten meinen aktuellen Pfad in einem neuen Terminalfenster öffnen, um zu sehen, wie nützlich dies ist Ctrl+T auf einigen Systemen, aber dies ist nur zur Veranschaulichung):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Beachten Sie den ` `
um v
. Dadurch wird v
zuerst als Befehl ausgeführt und dann anstelle von cd
eingesetzt.
Kopieren Sie den Inhalt nur in die Zwischenablage von X
cat file | xclip
Wenn Sie eine andere Stelle als X
einfügen möchten, versuchen Sie Folgendes:
cat file | xclip -selection clipboard
Verwenden Sie unter OS X pbcopy
; pbpaste
geht in die entgegengesetzte Richtung.
Ich habe dieses kleine Skript geschrieben, mit dem die Copy/Paste-Befehle erraten werden.
Die Linux-Version des Skripts setzt voraus, dass xclip bereits in Ihrem System installiert ist. Das Skript heißt Zwischenablage.
#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp's output into clipboard
# clipboard | someapp # Pipe clipboard's content into someapp
#
if command -v xclip 1>/dev/null; then
if [[ -p /dev/stdin ]] ; then
# stdin is a pipe
# stdin -> clipboard
xclip -i -selection clipboard
else
# stdin is not a pipe
# clipboard -> stdout
xclip -o -selection clipboard
fi
else
echo "Remember to install xclip"
fi
Die OS X-Version des Skripts basiert auf pbcopy und pbpaste, die auf allen Macs vorinstalliert sind.
#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp's output into clipboard
# clipboard | someapp # Pipe clipboard's content into someapp
#
if [[ -p /dev/stdin ]] ; then
# stdin is a pipe
# stdin -> clipboard
pbcopy
else
# stdin is not a pipe
# clipboard -> stdout
pbpaste
fi
Die Verwendung des Skripts ist sehr einfach, da Sie die Variable clipboard
wie in diesen beiden Beispielen gezeigt ein- oder ausleiten.
$ cat file | clipboard
$ clipboard | less
Ich habe ein Tool für Linux/OSX/Cygwin entwickelt, das einigen dieser anderen ähnelt, jedoch etwas einzigartig ist. Ich nenne es cb
und es kann in diesem Github Gist gefunden werden.
In diesem Kapitel demonstriere ich, wie Sie das Kopieren und Einfügen über die Befehlszeile unter Linux, macOS und Cygwin ausführen.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Hinweis: Ursprünglich wollte ich dies nur in meinem Kommentar zu der Antwort von Bob Enohp erwähnen. Aber dann wurde mir klar, dass ich meiner Gist ein README hinzufügen sollte. Da der Gist-Editor keine Markdown-Vorschau anbietet, habe ich das Antwortfeld hier verwendet und nach dem Kopieren/Einfügen in meinen Gist-Gedanken dachte ich: "Ich kann die Antwort auch gut einreichen."
Dieses Skript ist nach tee
modelliert (siehe man tee
).
Es ist wie Ihre normalen Befehle zum Kopieren und Einfügen, aber einheitlich und in der Lage zu erkennen, wann es kettenbar sein soll
$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017
$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017
(chronologisch machte es Sinn, dies am Ende zu demonstrieren)
# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00
Fügen Sie dies zu Ihrem ~/.bashrc
hinzu:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Nun clip p einfügen und c clip kopieren - aber du kannst auch schickere Sachen machen:
clipp | sed 's/^/ /' | cclip
↑ rückt die Zwischenablage ein; Gut für Sites ohne Stapelüberlauf { } Taste
Sie können es hinzufügen, indem Sie Folgendes ausführen:
printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
Ich verwende Parcellite und xsel
, um die letzte Commit-Nachricht von git
in meinen Zwischenablagen-Manager zu kopieren (aus irgendeinem Grund funktioniert xclip
nicht):
$ git log -1 --pretty=%B | xsel -i -b
Wenn Sie keine externen Tools verwenden, ist dies ein relativ einfacher Befehl, wenn Sie eine Verbindung zur Serversicht SSH herstellen:
Von einer Windows 7+-Eingabeaufforderung:
ssh [email protected] cat /etc/passwd | clip
Dadurch wird der Inhalt der Remote-Datei in Ihrer lokalen Zwischenablage gespeichert.
(Für den Befehl muss Pageant für den Schlüssel ausgeführt werden. Andernfalls werden Sie nach einem Kennwort gefragt.)
In Linux mit installiertem xclip:
xclip - Auswahl Zwischenablage <Datei
Ich habe ein kleines Tool erstellt, das ähnliche Funktionen bietet, ohne xclip oder xsel zu verwenden. stdout
wird in eine Zwischenablage kopiert und kann im Terminal wieder eingefügt werden. Sehen:
https://sourceforge.net/projects/commandlinecopypaste/
Beachten Sie, dass dieses Tool keine X-Sitzung benötigt. Die Zwischenablage kann nur im Terminal verwendet werden und muss nicht eingefügt werden Ctrl+V oder klicken Sie mit der mittleren Maustaste in andere X-Fenster.
Wenn Sie bash verwenden, das auf Ihrem Windows-System installiert ist (bekannt als Windows-Subsystem für Linux (WSL)), wird beim Versuch, xclip zu verwenden, ein Fehler ausgegeben:
Error: Can't open display: (null)
Denken Sie stattdessen daran, dass das Linux-Subsystem Zugriff auf ausführbare Windows-Dateien hat. Es ist möglich, clip.exe wie zu verwenden
echo hello | clip.exe
hiermit können Sie den Befehl Einfügen (Strg-V) verwenden.
Ich komme aus einem abgespeckten KDE-Hintergrund und habe keinen Zugriff auf xclip
, xsel
oder das andere schicke Zeug. Ich habe eine TCSH-Konsole, um die Sache noch schlimmer zu machen.
Voraussetzungen: qdbus
klipper
xargs
bash
Erstellen Sie eine ausführbare Bash-Datei foo.sh
.
#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null
Hinweis: Dies muss bash sein, da TCSH keine mehrzeiligen Argumente unterstützt.
Gefolgt von einem TCSH-Alias im.cshrc
.
alias clipboard xargs -0 /path/to/foo
Erklärung:
xargs -0
leitet stdin in ein einzelnes Argument. Dieses Argument wird an die ausführbare Bash-Datei übergeben, die eine Anforderung zum Kopieren in die Zwischenablage an klipper
mit qdbus
sendet. Die Pipe an /dev/null
gibt das von qdbus
zurückgegebene Zeilenvorschubzeichen nicht an die Konsole aus.
Verwendungsbeispiel:
ls | clipboard
Dadurch wird der Inhalt des aktuellen Ordners in die Zwischenablage kopiert.
Hinweis: Funktioniert nur als Pfeife. Verwenden Sie die ausführbare Bash-Datei direkt, wenn Sie ein Argument kopieren müssen.
Basierend auf früheren Beiträgen erhielt ich die folgende Light-Weight-Alias-Lösung, die zu .bashrc
hinzugefügt werden kann:
if [ -n "$(type -P xclip)" ]
then
alias xclip='xclip -selection clipboard'
alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi
Beispiele:
# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018
# Paste
$ date
Sat Dec 29 14:12:57 PST 2018
# Chain
$ date | clipboard | wc
1 6 29
Nur um einen Edge-Fall zu behandeln :) und weil der Fragentitel (zumindest jetzt) fragt, wie die Ausgabe eines Befehls direkt in die Zwischenablage kopiert werden soll.
Oft finde ich es nützlich, die Ausgabe des Befehls zu kopieren, nachdem sie bereits ausgeführt wurde, und ich möchte oder kann den Befehl nicht erneut ausführen.
Für dieses Szenario können wir entweder gdm oder ein ähnliches Mausprogramm verwenden und mit der Maus auswählen. apt-get install gdm
und dann entweder mit der rechten Maustaste oder mit den Tastenkombinationen Strg + Umschalt + c und Strg + Umschalt + v kopieren und in das Terminal einfügen
Oder, was für mich die bevorzugte Methode ist (da die Maus in einem Bereich nicht richtig auswählen kann, wenn Sie mehrere Bereiche nebeneinander haben und mehr als eine Zeile auswählen müssen), können wir mit tmux mit dem Standard in den tmux-Puffer kopieren [ Leertaste, bewegen, um auszuwählen, einzugeben, oder Sie können einen Codeblock auswählen. Dies ist auch besonders nützlich, wenn Sie sich in einer der Spuren des Cli-Multiplexers wie tmux befinden UND Sie eine Reihe von Text auswählen müssen, aber nicht die Zeilennummern (mein vim-Setup gibt die Zeilennummern wieder).
Danach können Sie den Befehl verwenden:
tmux save-buffer - | xclip -i
Sie können es natürlich als Alias für etwas verwenden, das Ihnen gefällt, oder direkt in der tmux-Konfigurationsdatei binden
Dies ist nur eine konzeptionelle Antwort, um diesen Edge-Fall abzudecken, wenn es nicht möglich ist, den Befehl erneut auszuführen. Wenn Sie spezifischere Codebeispiele benötigen, lassen Sie es mich wissen
Prost