Ist es möglich, in / aus der Zwischenablage in Bash zu pipen?
Ich kann nichts finden, egal ob es sich um eine Rohrleitung zu / von einem Gerätegriff handelt oder eine Hilfsanwendung verwendet.
Wenn beispielsweise /dev/clip
ein Gerät mit der Zwischenablage verknüpft wäre, könnten wir Folgendes tun:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
:%y+
in vim verwendet, was vim-speak bedeutet für "alle Zeilen in das '+' Register (die X-PRIMARY
Zwischenablage) ziehen (kopieren )". Sie können durch%
einen Bereich ersetzen , wenn Sie spezifisch sein möchten. Es gibt jedoch drei Einschränkungen: 1. Jetzt müssen Sie den gesamten Text in einer Datei speichern, bevor Sie ihn kopieren können. Dies steht im Gegensatz zu demxclip
in den Antworten genannten Befehl. 2. Wenn Sie noch nicht wissen, wie man vimt, kann dies mühsam sein. 3. Sie können dies nur tun, wenn beim Kompilieren von vim eine bestimmte Funktion aktiviert ist. Wenn Sie GVim installieren, sollte es standardmäßig sowohl in der GUI als auch in den Terminalinstanzen von vim aktiviert sein.xclip
. Ihre Antwort hat wie ein Zauber gewirkt.:%y+
eine, aber ok, du hast alle Grundlagen abgedeckt! Gut.Antworten:
Es gibt eine Fülle von Zwischenablagen, mit denen Sie sich befassen könnten. Ich gehe davon aus, dass Sie wahrscheinlich ein Linux-Benutzer sind, der Inhalte in die primäre Zwischenablage von X Windows einfügen möchte. Normalerweise verfügt die Zwischenablage, mit der Sie sprechen möchten, über ein Dienstprogramm, mit dem Sie mit ihr sprechen können.
Im Fall von X gibt es
xclip
(und andere).xclip -selection c
werden die Daten in die Zwischenablage senden , die mit arbeitet Ctrl + C, Ctrl + Vin den meisten Anwendungen.Wenn Sie unter Mac OS X arbeiten, gibt es
pbcopy
.Wenn Sie in Linux - Terminal - Modus (ohne X) sind dann schauen Sie in
gpm
oder Bildschirm , die eine Zwischenablage hat. Versuchen Sie denscreen
Befehlreadreg
.Verwenden Sie unter Windows 10+ oder Cygwin
/dev/clipboard
oderclip
.quelle
/dev/clipboard
funktioniert auch für Msys / MinGW-Bash-Shellsxclip -selection c
Daten an die Zwischenablageclip
dir | clip
/dev/clipboard
hat und zwingt, entweder xclip oder gpm zu installieren, was zumindest in Kubuntu standardmäßig fehlt (ich denke auch in den meisten anderen Distributionen) .Stellen Sie sicher, dass Sie verwenden,
alias xclip="xclip -selection c"
sonst können Sie nicht einfach Ctrl+ verwenden, vum es wieder an einer anderen Stelle einzufügen.Ctrl+v
=== test
quelle
xclip -selection clipboard -o
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Ich hoffe, das hilft.xclip
fügt keine neue Zeile hinzu,echo
ist. Versuchen Sie esprintf test | xclip -i -selection clipboard
. (printf
Fügt keine neue Zeile hinzu, es sei denn, Sie schreiben'test\n'
.)echo -n
anstelle vonprintf
.Installieren
Wenn Sie weder Zugriff auf
apt-get
noch habenpacman
,dnf
sind die Quellen auch auf sourceforge verfügbar .Installieren
Bash
In
~/.bash_aliases
hinzufügen:Vergessen Sie nicht, Ihre neue Konfiguration mit
. ~/.bash_aliases
oder durch Neustart Ihres Profils zu laden .Fisch
In
~/.config/fish/config.fish
hinzufügen:Vergessen Sie nicht, Ihre Fischinstanz neu zu starten, indem Sie Ihr Terminal neu starten, damit Änderungen übernommen werden.
Verwendungszweck
Sie können jetzt verwenden
setclip
undgetclip
zB:quelle
sudo pacman -S xclip
. Beachten Sie jedoch, dass dies.bashrc
nicht der beste Ort ist. Ich empfehle dem Endbenutzer, sich über die richtigen bashrc-, bash_aliases- und .profile-Dateien zu informieren und darüber, wie bash mit den einzelnen Dateien umgeht. Tipp: Fügen Sie es stattdessen in .bash_aliases ein.pacman
Paketmanagers wurde hinzugefügt und der.bashrc
Vorschlag entfernt. Ich weiß,.bash_aliases
ist besser angepasst, aber das Endergebnis ist das gleiche (.bashrc
erfordert nur,.bash_aliases
wenn es existiert). Wenn die Leute ein chaotisches System wollen, lassen Sie sie eines haben. :).bashrc
Quellen.bash_aliases
am Ende. ;) Ich folge dieser alten Konvention, die zu 100% kompatibel mit Arch, Ubuntu / Debian, Raspberry-Varianten, macOS / OSX und Windows Bash bleibt : stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Mit dieser Konvention verwende ich auf allen Maschinen genau die gleichen Punktedateien Ich berühre. Es ist ganz nett: github.com/eduncan911/dotfilesVerwenden Sie unter macOS das integrierte
pbcopy
undpbpaste
Befehle .Zum Beispiel, wenn Sie ausführen
Der Inhalt der
~/.bashrc
Datei kann mit der VerknüpfungCmd
+v
eingefügt werden.quelle
Versuchen
xclip
Mann
quelle
xsel auf Debian / Ubuntu / Mint
Installieren
quelle
echo "foo" | xclip -selection c
?xsel
undxclip
sind in jeder Hinsicht gleichwertig, außer dassxclip
Dateien nach Namen gelesen / geschrieben werden können, aberxsel
eine Shell-Umleitung erforderlich ist, wenn Sie auf eine Datei zugreifen möchten.xsel
funktioniert gut mit Skripten, währendxclip
es nur mit der Eingabeaufforderung funktioniert. Nicht sicher warum.Wow, ich kann nicht glauben, wie viele Antworten es auf diese Frage gibt. Ich kann nicht sagen, dass ich sie alle ausprobiert habe, aber ich habe die Top 3 oder 4 ausprobiert und keiner von ihnen funktioniert für mich. Was für mich funktioniert hat, war eine Antwort in einem der Kommentare eines Benutzers namens doug. Da ich es so hilfreich fand, beschloss ich, eine Antwort zu wiederholen.
Installieren Sie das Dienstprogramm xcopy und geben Sie im Terminal Folgendes ein:
Kopieren
Einfügen
Ich bemerkte viele Antworten empfohlen pbpaste und pbcopy. Wenn Sie sich für diese Dienstprogramme interessieren, diese jedoch aus irgendeinem Grund in Ihrem Repo nicht verfügbar sind, können Sie jederzeit einen Alias für die xcopy-Befehle erstellen und sie pbpaste und pbcopy nennen.
Dann würde es so aussehen:
quelle
Antwort 2018
Verwenden Sie clipboard-cli . Es funktioniert mit MacOS, Windows, Linux, OpenBSD, FreeBSD und Android ohne echte Probleme.
Installieren Sie es mit:
npm install -g clipboard-cli
Dann können Sie tun
echo foo | clipboard
Wenn Sie möchten, können Sie Alias
cb
durch die folgende in Putten.bashrc
,.bash_profile
oder.zshrc
:alias cb=clipboard
quelle
npm
Paket handelt?Auf dem Windows-Subsystem für Linux können Sie mit clip.exe in die Zwischenablage kopieren.
Denken Sie daran, den
|
Befehl pipe zu verwenden . Und kein>
Befehl, da das nicht funktioniert.quelle
Hier ist ein gebrauchsfertiges Bash-Skript zum Lesen der Zwischenablage, das auf mehreren Plattformen funktioniert. Bitte bearbeiten Sie das Skript hier, wenn Sie Funktionen hinzufügen (z. B. mehr Plattformen).
quelle
Versuchen Sie es unter Windows (mit Cygwin)
cat /dev/clipboard
oderecho "foo" > /dev/clipboard
wie in diesem Artikel erwähnt.quelle
clip
. Ich benutze msysgit 1.9.5 und das hat funktioniert.echo "foo" > /dev/clipboard
scheint Zeilenumbrüche vollständig zu zerstören (keine \ r \ n \ n Sache, aber komplett weg)Nur für Mac:
Diese befinden sich
/usr/bin/pbcopy
und/usr/bin/pbpaste
.quelle
Unter Linux gibt es verschiedene Zwischenablagen. Der X-Server hat einen, der Fenstermanager hat möglicherweise einen anderen usw. Es gibt kein Standardgerät.
Oh ja, auf CLI hat das Bildschirmprogramm ebenso wie einige andere Anwendungen wie Emacs und vi eine eigene Zwischenablage .
In X können Sie xclip verwenden .
Sie können diesen Thread auf andere mögliche Antworten überprüfen: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
quelle
Kopieren und Einfügen in die Zwischenablage in Windows (Cygwin):
Sehen:
Es gibt auch getclip (es kann anstelle von Shift+ Ins! Verwendet werden) und putclip (echo oaeuoa | putclip.exe, um es in den Clip zu setzen).
quelle
Dies ist ein einfaches Python-Skript, das genau das tut, was Sie brauchen:
Speichern Sie dies als ausführbare Datei irgendwo in Ihrem Pfad (ich habe es in gespeichert
/usr/local/bin/clip
. Sie können Inhalte einfügen, die in Ihrer Zwischenablage gespeichert werden sollen ...Und Sie können das, was sich in Ihrer Zwischenablage befindet, an ein anderes Programm weiterleiten ...
Wenn Sie es selbst ausführen, wird einfach ausgegeben, was sich in der Zwischenablage befindet.
quelle
cat tmpfile
keine Zwischenablage. // wie @horta antwortet.Ich habe eine gute Referenz gefunden: /unix/69111/
In meinem Fall möchte ich Inhalte in die Zwischenablage einfügen und auch sehen, was dort eingefügt wurde. Deshalb habe ich auch den
tee
Befehl mit einem Dateideskriptor verwendet:>()
ist eine Form der Prozesssubstitution. bash ersetzt jedes durch den Pfad zu einem Dateideskriptor, der mit der Standardeingabe des Programms in Klammern verbunden ist.Das
tee
Befehl gibt Ihren Befehl auf, sodass Sie "seinen Inhalt weiterleiten" und das Ergebnis in der Standardausgabe "stdout" anzeigen können.Sie können auch Aliase zum Abrufen und Schreiben in die Zwischenablage erstellen, sodass Sie "pbcopy" und "pbpaste" verwenden können, als wären Sie auf dem MAC. In meinem Fall, wenn ich zsh benutze, habe ich dies in meiner Aliase-Datei:
die
(( $+command[name] ))
in zsh - Tests , wenn der Befehl „name“ auf Ihrem System installiert ist, dann werden beide Aliase gruppieren{}
. Das&&
ist ein binäres UND, wenn a dann b, also wenn Sie xclip haben, werden die Aliase gesetzt.Um den Inhalt Ihrer Zwischenablage zu erhalten, geben Sie einfach Folgendes ein:
quelle
Erledigt den Job für X Window und ist meistens bereits installiert. Ein Blick in die Manpage von xsel ist die Mühe wert.
quelle
Einige Windows-Programme, die ich vor Jahren geschrieben habe. Mit ihnen können Sie die Zwischenablage sichern, verschieben, anhängen und drucken. Es funktioniert so:
Es enthält den Quellcode: cmd_clip.zip
quelle
Es gibt verschiedene Möglichkeiten. Einige der erwähnten Möglichkeiten umfassen (glaube ich) tmux, screen, vim, emacs und die Shell. Ich kenne keine Emacs oder Bildschirme, also gehe ich die anderen drei durch.
Tmux
Obwohl tmux keine X-Auswahl ist, verfügt es über einen Kopiermodus, auf den über
prefix-[
(prefix
is Ctrl+) zugegriffen werden kannB Standard). Der für diesen Modus verwendete Puffer ist separat und exklusiv für tmux. Dies eröffnet zahlreiche Möglichkeiten und macht ihn in den richtigen Situationen vielseitiger als die X-Auswahl.Um diesen Modus zu verlassen, drücken Sie q; Verwenden Sie zum Navigieren Ihre
vim
oder dieemacs
Bindung (Standard = vim), alsohjkl
für die Bewegung,v/V/C-v
für die Auswahl von Zeichen / Zeilen / Blöcken usw. Wenn Sie Ihre Auswahl getroffen haben, drücken SieEnter den Modus zu kopieren und zu verlassen.Verwenden Sie zum Einfügen aus diesem Puffer
prefix-]
.Schale
Jede Installation von
X11
scheint standardmäßig mit zwei Programmen zu kommen:xclip
undxsel
(ein bisschen wie es auch mit beidenstartx
und kommtxinit
). Die meisten anderen Antworten erwähnenxclip
, und ich mag es wirklichxsel
wegen seiner Kürze, also werde ich darauf eingehenxsel
.Von xsel (1x) :
Und das ist ungefähr alles, was Sie wissen müssen.
p
(oder nichts) fürPRIMARY
,s
fürSECONDARY
,b
fürCLIPBOARD
,o
für die Ausgabe.Beispiel: Angenommen, ich möchte die Ausgabe
foo
von einem TTY kopieren und für einen Fehlerbericht auf einer Webseite einfügen. Zu diesem Zweck ist es ideal, in die TTY / X-Sitzung zu kopieren. Es stellt sich also die Frage, wie ich über das TTY auf die Zwischenablage zugreifen kann.In diesem Beispiel wird davon ausgegangen, dass die X-Sitzung angezeigt wird
:1
.Dann kann ich
Ctrl-V
es wie gewohnt in die Form bringen.Angenommen, jemand auf der Support-Website gibt mir einen Befehl zum Ausführen, um das Problem zu beheben. Es ist kompliziert und lang.
Die Bestellung von Pizza scheint eine produktive Nutzung der Befehlszeile zu sein.
... weitermachen.
Vim
Wenn mit
+clipboard
(Dies ist wichtig! Überprüfen Sie Ihrevim --version
) kompiliert wurde , sollte Vim Zugriff auf das XPRIMARY
und dieCLIPBOARD
Auswahl haben. Die beiden Auswahlen sind von den*
und+
Registern sind, und kann zu und lesen Sie das gleiche wie jedes andere Register von in Ihrer Freizeit geschrieben werden. Zum Beispiel:Wenn Ihre Kopie von vim den Zugriff auf X-Auswahlen jedoch nicht direkt unterstützt, ist dies nicht das Ende der Welt. Sie können einfach die
xsel
im letzten Abschnitt beschriebene Technik verwenden.Binden Sie ein paar Schlüsselkombinationen und Sie sollten gut sein.
quelle
DISPLAY=
, eine X-Anwendung aus einer Nicht-X-Umgebung aufzurufen. X Apps benötigen dieDISPLAY
Umgebungsvariable, um herauszufinden, mit welchem Server (oder gibt es nur einen Server, der mehrere Sitzungen abwickelt?) Sie sprechen. VersuchenDISPLAY=:1 firefox
Sie es:1
beispielsweise mit einem TTY (oder was auch immer Ihre Anzeige-ID sein mag; meine ist es zufällig ).:%y+
in VIM.Aus diesem Thread gibt es eine Option , die alle nicht Installation erfordert
gclip
/xclip
/xsel
Software von Drittanbietern.Ein Perl-Skript (da Perl normalerweise immer installiert ist)
quelle
pbcopy ist in OSX integriert:
Kopieren des Inhalts von .bash_profile:
quelle
Verwenden Sie in macOS
pbpaste
.Zum Beispiel:
Aktualisieren Sie die Zwischenablage
quelle
Wenn Sie wie ich auf einem Linux-Server ohne Root-Rechte ausgeführt werden und kein xclip oder GPM vorhanden ist, können Sie dieses Problem umgehen, indem Sie einfach eine temporäre Datei verwenden. Zum Beispiel:
quelle
X selections
(was notwendigerweise durch "Zwischenablage" und Erwähnungen von xclip / xsel impliziert ist) verwenden, benötigen Sie eine aktive X-Sitzung (und damit einen X-Server), damit Sie auf die Auswahl in der zugreifen können erster Platz. Versuchen Sie,DISPLAY="" xsel
auf Ihrem lokalen Computer zu laufen, um zu sehen, was ich meine . Es wird bei einem Fehler beendet, da die Sitzung nicht gefunden werden kann""
, und es wird keine Interaktion mit einer X-Auswahl vorgenommen. Aus diesem Grund habe ich anfangs gesagt, dass ich nicht sehe, wie sich Root-Berechtigungen darauf auswirken: root oder kein root. In einer Serverumgebung ist es unwahrscheinlich, dass eine X-Auswahl nützlich ist.Unter Linux funktioniert dies:
quelle
Auf Wayland scheint xcopy nicht zu funktionieren. Verwenden Sie stattdessen die wl-Zwischenablage . zB auf Fedora
quelle
Es gibt auch xclip-copyfile .
quelle
Obwohl> 1 Jahr später, teile ich eine etwas andere Lösung. Hoffe das ist nützlich für jemanden.
Gestern stellte ich mich mit der Frage: "Wie teile ich die Zwischenablage zwischen verschiedenen Benutzersitzungen?" . Beim Umschalten zwischen Sitzungen mit ctrlaltF7-ctrlaltF8 , können Sie nicht einfügen, was Sie kopiert haben.
Ich habe die folgende schnelle und schmutzige Lösung gefunden, die auf einer Named Pipe basiert. Es ist sicherlich ziemlich kahl und roh, aber ich fand es funktional:
dann im sendenden Terminal
Zuletzt im empfangenden Terminal:
Jetzt tippen oder fügen Sie etwas in das erste Terminal ein und (nach dem Drücken return wird es sofort im empfangenden Terminal angezeigt, von wo aus Sie es an einer beliebigen Stelle erneut kopieren / einfügen können.
Dies erfordert natürlich nicht nur den Inhalt aus der Zwischenablage von Benutzer1, um ihn in der Zwischenablage von Benutzer2 verfügbar zu machen, sondern erfordert auch ein zusätzliches Paar Einfüge- und Kopierklicks.
quelle
xsel/xclip
. Beispielsweise hört ein Ende ab, ob sich eine der Auswahlen geändert hat, und leitet sie dann automatisch (über das benannte FIFO) an das andere Skript weiter, das eine oder mehrere Pipes abhört und diese in seine eigene X-Auswahl einfügt. Das Kopieren von Text würde daher automatisch dazu führen, dass derselbe Text in der Auswahl der anderen X-Sitzung angezeigt wird. Und vergiss nicht$DISPLAY
.Der Ruby Oneliner hat mich dazu inspiriert, es mit Python zu versuchen.
Angenommen, wir möchten einen Befehl, der alles in der Zwischenablage mit 4 Leerzeichen einrückt. Perfekt zum Teilen von Snippets im Stackoverflow.
Das ist kein Tippfehler. Python benötigt Zeilenumbrüche, um eine for-Schleife zu erstellen. Wir möchten die Zeilen in einem Durchgang ändern, um zu vermeiden, dass ein zusätzliches Array im Speicher aufgebaut wird.
Wenn es Ihnen nichts ausmacht, das zusätzliche Array zu erstellen, versuchen Sie:
aber ehrlich gesagt ist awk dafür besser als python. Ich habe diesen Alias in meiner
~/.bashrc
Datei definiertWenn ich jetzt
indent
starte, wird alles , was sich in meiner Zwischenablage befindet, eingerückt.quelle