Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und bei Verwendung eines Terminals wieder einfügen? Zum Beispiel:
cat file | clipboard
apt install xclip
undcat file | xclip -sel clip
Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und bei Verwendung eines Terminals wieder einfügen? Zum Beispiel:
cat file | clipboard
apt install xclip
undcat file | xclip -sel clip
Antworten:
Ich wollte das immer tun und fand einen schönen und einfachen Weg, es zu tun. Ich habe das gesamte Verfahren für den Fall aufgeschrieben, dass es jemand anderes benötigt.
Installieren Sie zuerst ein 16-kB-Programm mit dem Namen xclip
:
sudo apt-get install xclip
Anschließend können Sie die Ausgabe xclip
in die Zwischenablage kopieren, um sie zu kopieren:
cat file | xclip
Um den gerade kopierten Text einzufügen, müssen Sie Folgendes verwenden:
xclip -o
Um das Leben zu vereinfachen, können Sie wie ich einen Alias in Ihrer .bashrc-Datei einrichten:
alias "c=xclip"
alias "v=xclip -o"
Um zu sehen, wie nützlich dies ist, stellen Sie sich vor, ich möchte meinen aktuellen Pfad in einem neuen Terminalfenster öffnen ( auf einigen Systemen gibt es möglicherweise andere Möglichkeiten wie Ctrl+ T, dies dient jedoch nur zur Veranschaulichung):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Beachten Sie die ` `
Umgebung v
. Dies wird zuerst v
als Befehl ausgeführt und dann an Ort und Stelle für cd
die Verwendung ersetzt.
Kopieren Sie nur den Inhalt in die X
Zwischenablage
cat file | xclip
Wenn Sie eine andere Stelle als eine X
Anwendung einfügen möchten , versuchen Sie Folgendes:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
und alias "vs=xclip -o -selection clipboard"
vereinfachen Sie auch das Kopieren / Einfügen aus der System-Zwischenablage
Verwenden Sie unter OS X pbcopy
; pbpaste
geht in die entgegengesetzte Richtung.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Ich habe ein Tool für Linux / OSX / Cygwin erstellt, das einigen dieser anderen ähnelt, aber etwas einzigartig ist. Ich nenne es cb
und es kann in diesem Github-Kern gefunden werden .
In diesem Kern zeige ich, wie man mit Linux, macOS und Cygwin über die Kommandozeile kopiert und einfügt.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Hinweis: Ich wollte dies ursprünglich nur in meinem Kommentar zu Bob Enohps Antwort erwähnen . Aber dann wurde mir klar, dass ich meinem Kern eine README-Datei hinzufügen sollte. Da der Haupteditor keine Markdown-Vorschau anbietet, habe ich hier das Antwortfeld verwendet und nach dem Kopieren / Einfügen in meinen Hauptgedanken "Ich kann die Antwort genauso gut einreichen".
Dieses Skript ist nachempfunden tee
(siehe man tee
).
Es ist wie bei normalen Kopier- und Einfügebefehlen, jedoch einheitlich und in der Lage zu erkennen, wann es verkettbar 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 war es sinnvoll, 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
Ich habe dieses kleine Skript geschrieben, das das Erraten der Befehle zum Kopieren / Einfügen erleichtert.
Die Linux-Version des Skripts setzt voraus, dass xclip bereits auf 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 einfach ein- oder auspipen, clipboard
wie in diesen beiden Beispielen gezeigt.
$ cat file | clipboard
$ clipboard | less
pbcopy
und pbpaste
unter Linux, damit es sowohl unter Linux als auch unter OS X
~/.scripts/clipboard
* Machen Sie es chmod +x ~/.scripts/clipboard
für Bash ausführbar : * Fügen Sie es am export PATH=$PATH:~/.scripts
Ende von ~/.bashrc
for fish hinzu: * Hinzufügen set PATH ~/.scripts $PATH
zu ~/.config/fish/fish.config
Wenn eine der Dateien oder Ordner noch nicht vorhanden ist, erstellen Sie sie einfach.
clipboard(){ ... }
umschließen und in .bashrc
date | cb | tee -a updates.log
. Das würde die date
Befehlsausgabe an die Zwischenablage senden und an den tee -a
Befehl weiterleiten, der sie an eine Datei anfügt und an weiterleitet stdout
. Aber es ist wie ein " auslaufsicheres T - Stück in die Zwischenablage", denn wenn Sie es nur tun, erhalten date | cb
Sie keine Ausgabe. Und schließlich tut es auch cb > file.txt
gist.github.com/RichardBronosky/…
xclip -i -selection clipboard
aufxargs echo -n | xclip -i -selection clipboard
Fügen Sie dies zu Ihrem hinzu ~/.bashrc
:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Jetzt Clip- P- Pasten und C- Clip-Kopien - aber Sie können auch schickere Sachen machen:
clipp | sed 's/^/ /' | cclip
↑ rückt Ihre Zwischenablage ein; Gut für Websites ohne Stapelüberlauf- { }Schaltfläche
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
kopiere die letzte Festschreibungsnachricht von git
in meinen Zwischenablage-Manager ( xclip
funktioniert aus irgendeinem Grund nicht):
$ git log -1 --pretty=%B | xsel -i -b
Wenn Sie ohne Verwendung externer Tools eine Verbindung zur Serveransicht SSH herstellen, ist dies ein relativ einfacher Befehl:
An einer Windows 7+ Eingabeaufforderung:
ssh user@server cat /etc/passwd | clip
Dadurch wird der Inhalt der Remote-Datei in Ihre lokale Zwischenablage verschoben.
(Für den Befehl muss Pageant für den Schlüssel ausgeführt werden, oder Sie werden nach einem Kennwort gefragt.)
Ich habe ein kleines Tool erstellt, das ähnliche Funktionen bietet, ohne xclip oder xsel zu verwenden. stdout
wird in eine Zwischenablage kopiert und kann wieder in das Terminal eingefügt werden. Sehen:
https://sourceforge.net/projects/commandlinecopypaste/
Beachten Sie, dass dieses Tool keine X-Sitzung benötigt. Die Zwischenablage kann nur innerhalb des Terminals verwendet werden und muss nicht durch Ctrl+VKlicken oder Klicken mit der mittleren Maustaste in andere X-Fenster eingefügt werden .
Basierend auf früheren Beiträgen habe ich die folgende Alias-Lösung mit geringem Gewicht erhalten, die hinzugefügt werden kann .bashrc
:
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
Ich komme aus einem Hintergrund nach unten KDE gestrippt und haben keinen Zugang zu xclip
, xsel
oder die andere fancy stuff. 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 in der .cshrc
.
alias clipboard xargs -0 /path/to/foo
Erläuterung:
xargs -0
leitet stdin in ein einziges Argument. Dieses Argument wird an die ausführbare Bash-Datei übergeben, die eine Anforderung zum Kopieren in die Zwischenablage zur klipper
Verwendung sendet qdbus
. Die Pipe an /dev/null
besteht darin, das von qdbus
der Konsole zurückgegebene Zeilenumbruchzeichen nicht zu drucken .
Anwendungsbeispiel:
ls | clipboard
Dadurch wird der Inhalt des aktuellen Ordners in die Zwischenablage kopiert.
Hinweis: Funktioniert nur als Rohr. Verwenden Sie die ausführbare Bash-Datei direkt, wenn Sie ein Argument kopieren müssen.
Normalerweise führe ich diesen Befehl aus, wenn ich Folgendes kopieren muss ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
irgendwo anders.
Auf Wayland scheint xcopy nicht zu funktionieren. Verwenden Sie stattdessen die wl-Zwischenablage . zB auf Fedora
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
Wenn Sie bash verwenden, das auf Ihrem Windows-System installiert ist (bekannt als Windows Subsystem for Linux (WSL)), wird beim Versuch von xclip 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.
Nur um einen Randfall abzudecken :) 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 er bereits ausgeführt wurde, und ich möchte oder kann den Befehl nicht erneut ausführen.
In diesem Szenario können wir entweder gdm oder ein ähnliches Mausdienstprogramm verwenden und mit der Maus auswählen. apt-get install gdm
und dann entweder den rechten Klick oder die Kombinationen Strg + Umschalt + c und Strg + Umschalt + v zum Kopieren und Einfügen in das Terminal
Oder, was für mich die bevorzugte Methode ist (da die Maus nicht richtig in einem Bereich auswählen kann, wenn Sie mehrere Fenster nebeneinander haben und mehr als eine Zeile auswählen müssen), können wir mit tmux mithilfe des Standards in den tmux-Puffer kopieren [, Leerzeichen, verschieben, um auszuwählen, eingeben 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 eine Reihe von Texten auswählen müssen, jedoch nicht die Zeilennummern (mein vim-Setup rendert Zeilennummern).
Danach können Sie den folgenden Befehl verwenden:
tmux save-buffer - | xclip -i
Sie können es natürlich mit einem Alias versehen oder direkt in die tmux-Konfigurationsdatei einbinden
Dies dient nur dazu, Ihnen eine konzeptionelle Antwort zu geben, um diesen Randfall abzudecken, wenn es nicht möglich ist, den Befehl erneut auszuführen. Wenn Sie spezifischere Codebeispiele benötigen, lassen Sie es mich wissen
Prost