Wie sende ich stdin in die Zwischenablage?

44

Gibt es eine Funktionalität in Unix, die Folgendes ermöglicht:

echo "Some Text" | copy-to-clipboard
Stefan
quelle
Sie müssen stdout bedeuten?
Phunehehe
3
es kommt wirklich darauf an, auf welcher Seite der Pipe du stehst: P auf den Befehl, der sie in die Zwischenablage schickt stdin.
Stefan
2
Leute, die Unix schon lange verwenden, werden Ihnen sagen, dass es besser ist, zu schreiben <longTextFile straightToClipboard. Es ist dasselbe wie cat longTextFile straightToClipboard, erfordert aber kein Laufen cat. Nur eine Beobachtung. Fühlen Sie sich frei, es zu ignorieren. Weitere Hintergrundinformationen und Beispiele finden Sie unter Der unbrauchbare Einsatz von Cat Award .
Mikel

Antworten:

34

Es gibt einige Tools, die in die Zwischenablage schreiben können. Ich benutze xsel. Es werden Flags benötigt, um in die primäre X-Auswahl ( -p), die sekundäre Auswahl ( -s) oder die Zwischenablage ( -b) zu schreiben . Wenn Sie es bestehen, -iwird es aufgefordert, von stdin zu lesen. Sie möchten also:

$ echo "Some Text" | xsel -i -b
Michael Mrozek
quelle
4
Ein anderes ist xclip; es akzeptiert standardmäßig stdin. Ich benutze es nur, weil es das erste Tool ist, von dem ich gelernt habe.
Shawn J. Goff
@ Shawn Poste es als separate Antwort :)
Michael Mrozek
Ich denke, -iist in diesem Fall nicht erforderlich: man xsel1.2.0 sagt:and the selection is set from standard input if standard input is not a terminal (tty)
Ciro Santilli 新疆 新疆 改造 中心 法轮功 六四
xsel hat bei mir nicht funktioniert (ich weiß nicht warum), aber xclip (laut anderen Antworten).
Markrian
11

Wenn Sie xclip, wie von @Nicolas vorgeschlagen, den Inhalt der Zwischenablage später einfügen möchten, z. B. mit Strg + V, können Sie dies folgendermaßen tun:

$ echo "Some Text" | xclip -selection clipboard
danidemi
quelle
1
Ich versuche nicht, eine alte Frage wiederzubeleben, aber wenn Sie faul sind, echo "Some Text" | xclip -sel cfunktioniert das auch.
anonymoose
9

Sie können xsel verwenden

xsel < file 
jamespo
quelle
10
Die Frage ist: Welche Zwischenablage? Linux X-Server hat 3 (im Allgemeinen werden nur 2 verwendet) ... xsel verwendet standardmäßig die PRIMARY-Zwischenablage. Die PRIMARY-Zwischenablage wird jedes Mal automatisch aktiviert, wenn Sie einfach etwas auswählen. Sie fügen ein, wenn Sie die mittlere Maustaste drücken. Die Zwischenablage vom Typ Strg + C / Strg + V wird als Zwischenablage CLIPBOARD bezeichnet. Wenn Sie also die Zwischenablage Strg + C / Strg + V mit 'xsel' verwenden möchten, der befehl lautet: xsel -ib <file-long-or-short("schau ma, keine katze!" :) ... oder wenn du magst <file-long-or-short xsel -ib.. -i ist voreingestellt. -b ist für die Ctrl + C / Ctrl + V Art der Zwischenablage
Peter.O
gnome-terminal. Bearbeitet @jamespo - das scheint nicht zu funktionieren.
Ripper234
Funktioniert bei mir auf dem Gnome-Terminal in Ubuntu 10.04 mit dem xsel im Repo (Einfügen mit mittlerem Knopf)
jamespo
7

Auf Mac OS X gibt es die schönen pbcopyund pbpasteBefehle, die sehr hilfreich sind :)

cwd
quelle
0

Das einfachste ist wahrscheinlich xclip:

$ echo "Some Text" | xclip

Dann mit der mittleren Maustaste einfügen.

Wie xselwird es in der Regel nicht standardmäßig installiert, so dass Sie sie installieren können müssen ( sudo apt-get install xclipauf Debian / Ubuntu).

Nicolas Raoul
quelle
2
xcliperfordert die -selection clipboardOption. Die Standardauswahl pro Manpage ist etwas anderes.
Acumenus
0

xclipDies ist ein guter Weg, wie von @Nicolas Raoul beantwortet, aber wenn Sie etwas, das eine neue Zeile enthält, in die Zwischenablage leiten, wie z. B. pwd, wird die neue Zeile ebenfalls kopiert. In einigen Situationen kann es erwünscht sein, aber meistens möchte man die Newline nicht.

Die Lösung ist entweder:

echo -n $(pwd) | xclip -selection clipboard

(das -nentfernt den Zeilenumbruch aus dem wiedergegebenen Argument)

oder:

printf %s $(pwd) | xclip -selection clipboard

Die ""Umgebung $(pwd)kann erforderlich sein, aber es funktioniert mit und ohne Ubuntu mit Bash.

Calocedrus
quelle