Pipe in / aus der Zwischenablage im Bash-Skript

946

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/clipein 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
Moinudin
quelle
3
Ich habe :%y+in vim verwendet, was vim-speak bedeutet für "alle Zeilen in das '+' Register (die X- PRIMARYZwischenablage) 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 dem xclipin 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.
Braden Best
1
@BradenBest sollten Sie dies als Antwort eingeben. Ich bin in einer NIX-Umgebung und konnte nicht installieren xclip. Ihre Antwort hat wie ein Zauber gewirkt.
HankCa
@HankCa Okay, ich habe eine Antwort gepostet . Sag mir was du denkst.
Braden Best
@BradenBest ist eine sehr umfassende Antwort. Ich mochte nur die :%y+eine, aber ok, du hast alle Grundlagen abgedeckt! Gut.
HankCa
Eine weitere Option: Verwenden eines kleinen Perl-Skripts: Keine Installation erforderlich. Siehe meine Antwort unten .
VonC

Antworten:

862

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 cwerden 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 gpmoder Bildschirm , die eine Zwischenablage hat. Versuchen Sie den screenBefehl readreg.

Verwenden Sie unter Windows 10+ oder Cygwin /dev/clipboardoder clip.

lhunath
quelle
36
Cygwin: / dev / Zwischenablage
Glenn Jackman
24
unter Windows /dev/clipboardfunktioniert auch für Msys / MinGW-Bash-Shells
Mihai Rotaru
71
Beachten Sie, dass xclip -selection cDaten an die Zwischenablage
gesendet werden
31
Auf neueren Windows-Versionen können Sie einfach clipdir | clip
Folgendes
11
Es ist traurig, dass GNU / Linux kein solches Gerät /dev/clipboardhat und zwingt, entweder xclip oder gpm zu installieren, was zumindest in Kubuntu standardmäßig fehlt (ich denke auch in den meisten anderen Distributionen) .
Hi-Angel
282

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.

echo test | xclip    

Ctrl+v === test

Doug
quelle
1
Wie würde man es ohne dieses Befehlsargument einfügen?
Jonah
15
xclip -selection clipboard -o
Doug
32
da ich viel zwischen osx und linux hin und her gehe, habe ich folgendes in meinen dotfiles. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Ich hoffe, das hilft.
Doug
15
@ApockofFork, xclipfügt keine neue Zeile hinzu, echoist. Versuchen Sie es printf test | xclip -i -selection clipboard. ( printfFügt keine neue Zeile hinzu, es sei denn, Sie schreiben 'test\n'.)
David X
7
Oder verwenden Sie echo -nanstelle von printf.
Christian Pietsch
182

Installieren

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Wenn Sie weder Zugriff auf apt-getnoch haben pacman, dnfsind die Quellen auch auf sourceforge verfügbar .

Installieren

Bash

In ~/.bash_aliaseshinzufügen:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

Vergessen Sie nicht, Ihre neue Konfiguration mit . ~/.bash_aliasesoder durch Neustart Ihres Profils zu laden .

Fisch

In ~/.config/fish/config.fishhinzufügen:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

Vergessen Sie nicht, Ihre Fischinstanz neu zu starten, indem Sie Ihr Terminal neu starten, damit Änderungen übernommen werden.

Verwendungszweck

Sie können jetzt verwenden setclipund getclipzB:

$ echo foo | setclip
$ getclip
foo
tleb
quelle
3
Für alle anderen Distributionen: Sie können die Quelle von sourceforge.net/projects/xclip
Scz
+1 Beste Lösung! In Arch , sudo pacman -S xclip. Beachten Sie jedoch, dass dies .bashrcnicht 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.
eduncan911
1
Danke @ eduncan911! :) Die Option zur Verwendung des pacmanPaketmanagers wurde hinzugefügt und der .bashrcVorschlag entfernt. Ich weiß, .bash_aliasesist besser angepasst, aber das Endergebnis ist das gleiche ( .bashrcerfordert nur, .bash_aliaseswenn es existiert). Wenn die Leute ein chaotisches System wollen, lassen Sie sie eines haben. :)
Tleb
@EladTabak Glücklich, dass es geholfen hat.
Tleb
1
@jpaugh du bist richtig. meine .bashrcQuellen .bash_aliasesam 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/dotfiles
eduncan911
143

Verwenden Sie unter macOS das integrierte pbcopyundpbpaste Befehle .

Zum Beispiel, wenn Sie ausführen

cat ~/.bashrc | pbcopy

Der Inhalt der ~/.bashrcDatei kann mit der Verknüpfung Cmd+ veingefügt werden.

jtruelove
quelle
37

Versuchen

xclip

xclip - command line interface to X selections (clipboard) 

Mann

Zoredache
quelle
25

xsel auf Debian / Ubuntu / Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Installieren

sudo apt-get install xsel
Andrew_1510
quelle
Wie unterscheidet sich das von echo "foo" | xclip -selection c?
Léo Léopold Hertz 준영
Es gibt einige Antworten auf diese Frage von Ubuntu , aber hauptsächlich xselund xclipsind in jeder Hinsicht gleichwertig, außer dass xclipDateien nach Namen gelesen / geschrieben werden können, aber xseleine Shell-Umleitung erforderlich ist, wenn Sie auf eine Datei zugreifen möchten.
Colin D Bennett
xselfunktioniert gut mit Skripten, während xclip es nur mit der Eingabeaufforderung funktioniert. Nicht sicher warum.
NVRM
16

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

Thing_you_want_to_copy|xclip -selection c

Einfügen

myvariable=$(xclip -selection clipboard -o)

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.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Dann würde es so aussehen:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
thebunnyrules
quelle
Großartig, Ihr Alias-Teil entspricht ziemlich gut MacOS.
MeadowMuffins
15

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 cbdurch die folgende in Putten .bashrc, .bash_profileoder .zshrc:

alias cb=clipboard

Evan Conrad
quelle
2
Sind Sie sicher, dass es sich um ein sicheres npmPaket handelt?
Johnny
3
@Stas, ich hoffe es, es wurde von Sindresorhus ( github.com/sindresorhus ) erstellt, dem produktivsten Node Contributor. Er ist verantwortlich für die Ava-Testbibliothek, den xo linter, Yeoman und unzählige andere Projekte. Er ist auch für unzählige kleine Bibliotheken wie diese verantwortlich, die seinen Code gemeinsam auf fast jeder JS-verwendenden Website im Internet platzieren. Das heißt nicht, dass er nicht kompromittiert werden konnte; Nur dass die Anzahl der Augen auf seine Repos und sein eigener Ruf es viel weniger wahrscheinlich machen als die meisten zufälligen npm-Repos.
Evan Conrad
Cool! Arbeiten unter Ubuntu GNU / Linux, wo xclip nicht funktioniert.
Kevin Buchs
14

Auf dem Windows-Subsystem für Linux können Sie mit clip.exe in die Zwischenablage kopieren.

cat file | clip.exe

Denken Sie daran, den |Befehl pipe zu verwenden . Und kein >Befehl, da das nicht funktioniert.

Wissen ist Macht
quelle
11

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

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp
Wolfgang Fahl
quelle
bruhh, das funktioniert eigentlich, warum ist das nicht die Antwort?
255.tar.xz
9

Versuchen Sie es unter Windows (mit Cygwin) cat /dev/clipboardoder echo "foo" > /dev/clipboardwie in diesem Artikel erwähnt.

Norman H.
quelle
1
Wie der Benutzer @maep in einem separaten Kommentar erwähnt hat, können neuere Windows-Versionen (die ich nur für Win10 bestätigen kann) einfach an weiterleiten clip. Ich benutze msysgit 1.9.5 und das hat funktioniert.
Shawn Erquhart
echo "foo" > /dev/clipboardscheint Zeilenumbrüche vollständig zu zerstören (keine \ r \ n \ n Sache, aber komplett weg)
user1529413
9

Nur für Mac:

echo "Hello World" | pbcopy
pbpaste

Diese befinden sich /usr/bin/pbcopyund /usr/bin/pbpaste.

Nyitguy
quelle
8

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

Sunny Milenov
quelle
2
Es klingt so, als wäre das Erstellen von / dev / clip ein gutes Projekt für jemanden.
TED
2
Ich bin mir der vielen Zwischenablagen sehr bewusst. Wie erschwert dies die Beantwortung meiner Frage?
Moinudin
Es wäre sinnvoll, wenn die Zwischenablagen standardisiert wären, und würde wahrscheinlich nicht schaden, wenn Sie mit / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> darauf zugreifen könnten. Das einzige Problem ist, dass sie benutzerspezifisch sind und Geräte sind systemweit. Wenn Sie jedoch einen Kernel-Gerätetreiber erstellen, der sich entsprechend der zugreifenden UID maskiert, sollte dies wie erwartet funktionieren.
5

Kopieren und Einfügen in die Zwischenablage in Windows (Cygwin):

Sehen:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

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

Stenemo
quelle
4

Dies ist ein einfaches Python-Skript, das genau das tut, was Sie brauchen:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

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

echo "Hello World" | clip

Und Sie können das, was sich in Ihrer Zwischenablage befindet, an ein anderes Programm weiterleiten ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Wenn Sie es selbst ausführen, wird einfach ausgegeben, was sich in der Zwischenablage befindet.

tysweat
quelle
Dies funktioniert, wenn Sie sich auf einem einzelnen Computer befinden, aber Sie können keine Dinge zwischen Computern kopieren.
Charles Plager
scheint nur "echo str> tmpfile" und cat tmpfilekeine Zwischenablage. // wie @horta antwortet.
Yurenchen
Dies scheint keine Variable für die Zwischenablage festzulegen, daher kann ich den Inhalt nicht in eine andere Anwendung einfügen - es ist keine echte Zwischenablage!
Jena
4

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 teeBefehl mit einem Dateideskriptor verwendet:

echo "just a test" | tee >(xclip -i -selection clipboard)

>()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:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

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.

echo "another test" | tee >(pbcopy)

Um den Inhalt Ihrer Zwischenablage zu erhalten, geben Sie einfach Folgendes ein:

pbpaste | "any-command-you-need-here"
SergioAraujo
quelle
4
  xsel -b

Erledigt den Job für X Window und ist meistens bereits installiert. Ein Blick in die Manpage von xsel ist die Mühe wert.

Martin Fischer
quelle
2

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:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Es enthält den Quellcode: cmd_clip.zip

jeng
quelle
2

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-[( prefixis 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 vimoder die emacsBindung (Standard = vim), also hjklfür die Bewegung, v/V/C-vfü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 X11scheint standardmäßig mit zwei Programmen zu kommen: xclipund xsel(ein bisschen wie es auch mit beiden startxund kommt xinit). Die meisten anderen Antworten erwähnen xclip, und ich mag es wirklich xselwegen seiner Kürze, also werde ich darauf eingehen xsel.

Von xsel (1x) :

Eingabemöglichkeiten

-a, --anhängen

Fügen Sie der Auswahl die Standardeingabe hinzu. Impliziert -i .

-f, --follow

an die Auswahl anhängen, wenn die Standardeingabe wächst. Impliziert -i .

-i, --Eingabe

Lesen Sie die Standardeingabe in die Auswahl ein.

Ausgabeoptionen

-o, --Ausgabe

Schreiben Sie die Auswahl in die Standardausgabe.

Aktionsoptionen

-c, --klar

Löschen Sie die Auswahl. Überschreibt alle Eingabeoptionen.

-d, - löschen

Fordern Sie an, dass die aktuelle Auswahl gelöscht wird. Dies löscht nicht nur die Auswahl, sondern fordert auch das Programm, in dem sich die Auswahl befindet, auf, den ausgewählten Inhalt zu löschen. Überschreibt alle Eingabeoptionen.

Auswahlmöglichkeiten

-p, --primär

Betätigen Sie die PRIMARY-Auswahl (Standard).

-s, --sekundär

arbeiten Sie an der SECONDARY-Auswahl.

-b, --clipboard

Betätigen Sie die CLIPBOARD-Auswahl.

Und das ist ungefähr alles, was Sie wissen müssen. p(oder nichts) für PRIMARY, sfür SECONDARY, bfür CLIPBOARD,o für die Ausgabe.

Beispiel: Angenommen, ich möchte die Ausgabe foovon 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.

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Dann kann ich Ctrl-Ves 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.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

Die Bestellung von Pizza scheint eine produktive Nutzung der Befehlszeile zu sein.

... weitermachen.

Vim

Wenn mit +clipboard(Dies ist wichtig! Überprüfen Sie Ihre vim --version) kompiliert wurde , sollte Vim Zugriff auf das X PRIMARYund die CLIPBOARDAuswahl 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:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

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 xselim letzten Abschnitt beschriebene Technik verwenden.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Binden Sie ein paar Schlüsselkombinationen und Sie sollten gut sein.

Braden Best
quelle
Denken Sie auf jeden Fall immer daran DISPLAY=, eine X-Anwendung aus einer Nicht-X-Umgebung aufzurufen. X Apps benötigen die DISPLAYUmgebungsvariable, um herauszufinden, mit welchem ​​Server (oder gibt es nur einen Server, der mehrere Sitzungen abwickelt?) Sie sprechen. Versuchen DISPLAY=:1 firefoxSie es :1beispielsweise mit einem TTY (oder was auch immer Ihre Anzeige-ID sein mag; meine ist es zufällig ).
Braden Best
Für mich war die Wahl in meiner Umgebung :%y+in VIM.
HankCa
2

Aus diesem Thread gibt es eine Option , die alle nicht Installation erfordert gclip/ xclip/ xselSoftware von Drittanbietern.

Ein Perl-Skript (da Perl normalerweise immer installiert ist)

use Win32::Clipboard;
print Win32::Clipboard::GetText();
VonC
quelle
Wie würde ich das benutzen? Skript in PATH speichern und einleiten? Ich versuche, einen Dropbox-Cli-Wrapper zu schreiben, um Freigabelinks zu kopieren, also brauche ich ihn nur, um Text zu verarbeiten.
Jena
2

pbcopy ist in OSX integriert:

Kopieren des Inhalts von .bash_profile:

cat ~/.bash_profile | pbcopy
Skulas
quelle
1

Verwenden Sie in macOS pbpaste .

Zum Beispiel:

Aktualisieren Sie die Zwischenablage

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy
jiahut
quelle
1

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:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!
Horta
quelle
Ich sehe nicht, wie ein Mangel an Root-Rechten dazu beiträgt.
Braden Best
3
@BradenBest Mangelnde Root-Rechte bedeuten, dass ich keine Dinge installieren konnte.
Horta
Aber was würden Sie installieren? X? Auf einem Server? Wenn Sie keinen seltsamen X-Weiterleitungsdienst hosten, kann ich nicht verstehen, warum Sie das jemals tun möchten.
Braden Best
@BradenBest Ich bin mir nicht sicher. Unabhängig davon, welches Programm oder welcher Dienst es mir ermöglichen würde, ein Kopier- und Einfügevorgang durchzuführen.
Horta
1
Nun, wenn Sie eine der 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="" xselauf 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.
Braden Best
1

Unter Linux funktioniert dies:

cat filename | xclip
Tobias Kwant
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

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:

user1@host:~$ mkfifo /tmp/sharedClip

dann im sendenden Terminal

user1@host:~$ cat > /tmp/sharedClip

Zuletzt im empfangenden Terminal:

user2@host:~$ cat /tmp/sharedClip

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.

lurix66
quelle
Scheint nicht allzu überraschend. Zwei verschiedene X-Server = zwei verschiedene Auswahlsätze. Sie können jedoch ein Skript einrichten, das die Eingabe / Ausgabe über übernimmt 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.
Braden Best
0

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.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

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:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

aber ehrlich gesagt ist awk dafür besser als python. Ich habe diesen Alias ​​in meiner ~/.bashrcDatei definiert

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

Wenn ich jetzt indentstarte, wird alles , was sich in meiner Zwischenablage befindet, eingerückt.

Harry Moreno
quelle