Wie kann ich die Ausgabe eines Befehls direkt in meine Zwischenablage kopieren?

528

Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und bei Verwendung eines Terminals wieder einfügen? Zum Beispiel:

cat file | clipboard
Legende
quelle
Mögliches Duplikat von Pipe to / from Clipboard
Ciro Santilli 法轮功 冠状 病 病 六四
mögliches Duplikat von superuser.com/questions/104981/…
Champ
Ich habe gerade eine verwandte Frage gestellt, da ich xclip nicht zum Laufen bringen kann, wenn ich mich von Git Bash unter Windows bei Ubuntu anmelde
Ryan
1
Speichern Sie den Dateiinhalt in der Zwischenablage. apt install xclipundcat file | xclip -sel clip
EsmaeelE

Antworten:

597

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 xclipin 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 vals Befehl ausgeführt und dann an Ort und Stelle für cddie Verwendung ersetzt.

Kopieren Sie nur den Inhalt in die XZwischenablage

cat file | xclip

Wenn Sie eine andere Stelle als eine XAnwendung einfügen möchten , versuchen Sie Folgendes:

cat file | xclip -selection clipboard
Legende
quelle
144
"cat file | xclip" kopiert den Inhalt nur in die 'X'-Zwischenablage. Wenn Sie eine andere Stelle als eine' X'-Anwendung einfügen möchten, versuchen Sie Folgendes: "cat file | xclip -selection clipboard"
khotyn
5
Ihre Wahl des Griffs ist angemessen!
Matt Joiner
4
Wenn Sie das Zeilenumbruchzeichen entfernen möchten, damit Sie das Ergebnis von "pwd | c" direkt einfügen und bearbeiten können, können Sie "pwd | tr -d '\ n' | xclip -selection c"
Anake
12
Definieren alias "cs=xclip -selection clipboard"und alias "vs=xclip -o -selection clipboard"vereinfachen Sie auch das Kopieren / Einfügen aus der System-Zwischenablage
Yibo Yang
1
Was ist mit einer Lösung, bei der ich keinen Sudo-Zugriff habe und xclip nicht installiert ist?
DanGordon
179

Verwenden Sie unter OS X pbcopy; pbpastegeht in die entgegengesetzte Richtung.

pbcopy < .ssh/id_rsa.pub
DavidPhillipOster
quelle
14
Yups! Genau so zum Beispiel:pbcopy < .ssh/id_rsa.pub
DoubleJosh
funktioniert nicht für Befehlsausgabe tho - zBpbcopy < git merge-base master some-branch
Ben
wenn Sie tmux verwenden, wird es nicht funktionieren , wenn Sie wieder anbringen Ihre Sitzung: superuser.com/a/413233/146254
Atav32
1
Sie können auch cat verwenden, wenn Sie bereits damit arbeiten: cat file.txt | pbcopy
rtrigoso
3
Ich weiß, dass der Kommentar 5 Jahre alt ist, aber falls jemand in Zukunft darauf git merge-base master some-branch | pbcopy
Sam
62

Ich habe ein Tool für Linux / OSX / Cygwin erstellt, das einigen dieser anderen ähnelt, aber etwas einzigartig ist. Ich nenne es cbund 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.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

Mac OS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_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".

cb

Ein auslaufsicheres T-Shirt in der Zwischenablage

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

Beispiele

Kopieren

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Einfügen

# 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

Verkettung

$ 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

Kopieren per Dateiumleitung

(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
Bruno Bronosky
quelle
Dies funktionierte perfekt für mich, um eine Befehlsausgabe in die Zwischenablage im Terminal unter macOS zu kopieren, danke!
Joshua Dyck
46

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, clipboardwie in diesen beiden Beispielen gezeigt.

$ cat file | clipboard

$ clipboard | less
Bob Enohp
quelle
3
Ich benutze die Namen pbcopyund pbpasteunter Linux, damit es sowohl unter Linux als auch unter OS X
funktioniert.
So arbeiten Sie das Skript global in Ubuntu: * Speichern Sie es unter ~/.scripts/clipboard * Machen Sie es chmod +x ~/.scripts/clipboard für Bash ausführbar : * Fügen Sie es am export PATH=$PATH:~/.scriptsEnde von ~/.bashrc for fish hinzu: * Hinzufügen set PATH ~/.scripts $PATHzu ~/.config/fish/fish.config Wenn eine der Dateien oder Ordner noch nicht vorhanden ist, erstellen Sie sie einfach.
Hockey
2
Sie können dieses Skript auch als Funktion clipboard(){ ... }umschließen und in .bashrc
Sebastian Nowak am
Dies ist sehr ähnlich zu dem, den ich gemacht habe, aber ich erlaube Verkettung wie date | cb | tee -a updates.log. Das würde die dateBefehlsausgabe an die Zwischenablage senden und an den tee -aBefehl 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 | cbSie keine Ausgabe. Und schließlich tut es auch cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky
Ein Vorschlag: Entfernen Sie das nachfolgende Zeilenumbruchzeichen, um zu vermeiden, dass der Befehl beim Einfügen ausgeführt wird (z. B. beim Kopieren und Einfügen eines Pfads). Ich mache das, indem ich den Befehl xclip -i -selection clipboardaufxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev
23

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
user3276552
quelle
Geben Sie bitte ein Anwendungsbeispiel
Ulf Aslak
7

Ich verwende Parcellite und xselkopiere die letzte Festschreibungsnachricht von gitin meinen Zwischenablage-Manager ( xclipfunktioniert aus irgendeinem Grund nicht):

$ git log -1 --pretty=%B | xsel -i -b
Michal Przybylowicz
quelle
7

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.)

d.raev
quelle
1
@AfshinMoazami, der Titel und die Frage selbst sind generisch. Nur die Tags weisen auf ein Unix-System hin, und meine Antwort deckt den Fall ab, wenn Sie versuchen, das Datum von einem Unix-Server auf einen Windows-Computer zu übertragen, was für zukünftige Leser nützlich sein kann.
d.raev
1
Upvoted, weil ja, nützlich für Windows-Administratoren, die nur Powershell zum lokalen Spielen haben (obwohl LSW jetzt tatsächlich funktioniert, kann ich direkt von Powershell aus in Bash einsteigen und von dort aus meine * nixy-Dinge erledigen).
Flith
Es arbeitet an der DOS-Eingabeaufforderung sowie an Git Bash unter Windows 10, dhecho Hello World | clip
5

Für Mac ist dies ein Beispiel für das Kopieren (in die Zwischenablage) des Einfügens (aus der Zwischenablage) über die Befehlszeile

Kopieren Sie das Ergebnis des pwdBefehls in die Zwischenablage als

$ pwd | pbcopy

Verwenden Sie den Inhalt in der Zwischenablage als

$ cd $(pbpaste)
mcvkr
quelle
3

Ich habe ein kleines Tool erstellt, das ähnliche Funktionen bietet, ohne xclip oder xsel zu verwenden. stdoutwird 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 .

Dirk Duschinger
quelle
3

Unter Linux mit installiertem xclip:

xclip -selection Zwischenablage <Datei

tristobal
quelle
2

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
kornieff
quelle
1

Ich komme aus einem Hintergrund nach unten KDE gestrippt und haben keinen Zugang zu xclip, xseloder 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 -0leitet stdin in ein einziges Argument. Dieses Argument wird an die ausführbare Bash-Datei übergeben, die eine Anforderung zum Kopieren in die Zwischenablage zur klipperVerwendung sendet qdbus. Die Pipe an /dev/nullbesteht darin, das von qdbusder 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.

Ryan Dsouza
quelle
1

Normalerweise führe ich diesen Befehl aus, wenn ich Folgendes kopieren muss ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v irgendwo anders.

Yamen Ashraf
quelle
1

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
Jens Timmerman
quelle
0

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.

DFeng
quelle
1
Beachten Sie, dass Sie xclip scheinbar problemlos verwenden können, wenn ein xserver (z. B. vcxsvr oder xming) unter Windows installiert ist, eine Anzeige aktiv ist und xclipboard ausgeführt wird.
Bitbyte
0

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 gdmund 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

George Mogilevsky
quelle