wake-up-neo.com

Pipe zur / von der Zwischenablage im Bash-Skript

Ist es möglich, in Bash eine Pipe zur/von der Zwischenablage zu erstellen?

Ich kann nichts finden, egal ob es sich um ein Piping von/zu einem Geräte-Handle oder um eine Zusatzanwendung handelt.

Wenn beispielsweise /dev/clip ein Gerät ist, das mit der Zwischenablage verknüpft ist, können wir Folgendes tun:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard
838
marcog

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 kopieren 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 sendet Daten an die Zwischenablage, mit der gearbeitet wird Ctrl + CCtrl + V in den meisten Anwendungen.

Unter Mac OS X gibt es pbcopy.

Wenn Sie sich im Linux-Terminalmodus befinden (kein X), suchen Sie in gpm oder screen nach einer Zwischenablage. Probieren Sie den Befehl screenreadreg aus.

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

770
lhunath

Stellen Sie sicher, dass Sie den Alias ​​xclip="xclip -selection c" verwenden Ctrl+v um es wieder an einem anderen Ort einzufügen.

echo test | xclip    

Ctrl+v === test

248
doug

Installieren

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

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Wenn Sie keinen Zugriff auf apt-get oder pacman oder dnf haben, sind die Quellen auf sourceforge verfügbar.

Konfiguration

Bash

Fügen Sie in ~/.bash_aliases Folgendes hinzu:

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

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

Fisch

Fügen Sie in ~/.config/fish/config.fish Folgendes hinzu:

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 die Änderungen wirksam werden.

Verwendungszweck

Sie können jetzt setclip und getclip verwenden, z.

$ echo foo | setclip
$ getclip
foo
160
tleb

Verwenden Sie unter macOS die eingebauten Befehle pbcopy und pbpaste .

Zum Beispiel, wenn Sie laufen

cat ~/.bashrc | pbcopy

der Inhalt der Datei ~/.bashrc kann mit der Verknüpfung Cmd + v eingefügt werden.

132
jtruelove

Versuchen

xclip

xclip - command line interface to X selections (clipboard) 

Mann

36
Zoredache

xsel unter 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
22
Andrew_1510

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 mir geholfen hat, war eine Antwort in einem Kommentar eines Benutzers namens doug. Da ich es so hilfreich fand, beschloss ich, es in einer Antwort noch einmal zu wiederholen.

Installieren Sie das Dienstprogramm xcopy und geben Sie Folgendes ein, wenn Sie sich im Terminal befinden:

Kopie

Thing_you_want_to_copy|xclip -selection c

Einfügen

myvariable=$(xclip -selection clipboard -o)

Ich bemerkte eine Menge empfohlener Antworten auf pbpaste und pbcopy. Wenn Sie sich für diese Dienstprogramme interessieren, diese aber aus irgendeinem Grund nicht in Ihrem Repo verfügbar sind, können Sie jederzeit einen Alias ​​für die xcopy-Befehle erstellen und sie als pbpaste und pbcopy bezeichnen.

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)
14
thebunnyrules

Hier ist ein fertiges Bash-Skript zum Lesen der Zwischenablage, das auf mehreren Plattformen funktioniert. Bearbeiten Sie das Skript hier, wenn Sie Funktionen hinzufügen (z. B. mehrere 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
11
Wolfgang Fahl

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 Pipe-Befehl | zu verwenden. Und kein > Befehl, da das nicht funktionieren wird.

11

Versuchen Sie unter Windows (mit Cygwin) cat /dev/clipboard oder echo "foo" > /dev/clipboard, wie in this article erwähnt.

9
Norman H

2018 antworten

Verwenden Sie clipboard-cli . Es funktioniert mit macOS, Windows, Linux, OpenBSD, FreeBSD und Android ohne echte Probleme.

Installiere es mit:

npm install -g clipboard-cli

Dann kannst du machen

echo foo | clipboard

Wenn Sie möchten, können Sie einen Alias ​​für cb erstellen, indem Sie Folgendes in Ihr .bashrc, .bash_profile oder .zshrc einfügen:

alias cb=clipboard

9
Evan Conrad

Nur für Mac:

echo "Hello World" | pbcopy
pbpaste

Diese befinden sich /usr/bin/pbcopy und /usr/bin/pbpaste.

8
nyitguy

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 eine eigene Zwischenablage wie einige andere Anwendungen wie Emacs und vi .

In X können Sie xclip verwenden.

Sie können in diesem Thread nach weiteren möglichen Antworten suchen: http://unix.derkeiler.com/Newsgroups/comp.unix.Shell/2004-07/0919.html

8
Sunny Milenov

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

sehen:

$ clip.exe -?

CLIP Description: Leitet die Ausgabe von Befehlszeilenprogrammen in die Windows-Zwischenablage um. Diese Textausgabe kann dann in andere Programme eingefügt werden. Parameterliste: /? Zeigt diese Hilfemeldung an. Beispiele: DIR | CLIP Fügt eine Kopie des aktuellen Verzeichnisses in die Windows-Zwischenablage ein. CLIP <README.TXT Fügt eine Kopie des Texts aus der Datei readme.txt in die Windows-Zwischenablage ein.

Es gibt auch getclip (kann anstelle von shift + ins verwendet werden!), Putclip (echo oaeuoa | putclip.exe, um es in den Clip zu setzen)

5
Stenemo

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

Speichere dies als ausführbare Datei irgendwo in deinem Pfad (ich habe es in /usr/local/bin/clip gespeichert. Du kannst Sachen einspielen, die in deiner 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 alleine ausführen, wird einfach ausgegeben, was sich in der Zwischenablage befindet.

4
tysweat
  xsel -b

Erledigt das für x11, es ist meistens schon installiert. Ein Blick in die Manpage von xsel lohnt sich.

4
Martin Fischer

Von diesem Thread gibt es eine Option, für die keine gclip/xclip/xsel-Software von Drittanbietern installiert werden muss.

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

use Win32::Clipboard;
print Win32::Clipboard::GetText();
2
VonC

Ein paar Windows-Programme, die ich vor Jahren geschrieben habe. Mit ihnen können Sie die Zwischenablage sichern, verschieben, anhängen und drucken. Das funktioniert so:

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

Es enthält den Quellcode: cmd_clip.Zip

2
jeng

Es gibt verschiedene Möglichkeiten. Einige der Möglichkeiten, die erwähnt wurden, umfassen (glaube ich) tmux, screen, vim, emacs und die Shell. Ich kenne weder Emacs noch Bildschirm, deshalb gehe ich die anderen drei durch.

Tmux

Obwohl es sich nicht um eine X-Auswahl handelt, verfügt tmux über einen Kopiermodus, auf den über prefix-[ (prefix zugegriffen werden kann Ctrl+B standardmäßig). Der für diesen Modus verwendete Puffer ist separat und exklusiv für tmux. Dies eröffnet einige 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 die Bindung vim oder emacs (Standard = vim), also hjkl für die Bewegung, v/V/C-v für die Auswahl von Zeichen/Linien/Blöcken usw. Wenn Sie haben Ihre Auswahl treffen Enter Kopieren und Verlassen des Modus.

Verwenden Sie zum Einfügen aus diesem Puffer prefix-].

Schale

Jede Installation von X11 scheint standardmäßig mit zwei Programmen ausgestattet zu sein: xclip und xsel (ein bisschen wie die Installation von startx und xinit). Die meisten anderen Antworten erwähnen xclip, und ich mag xsel wegen seiner Kürze sehr, deshalb werde ich xsel behandeln.

Von xsel (1x) :

Eingabemöglichkeiten

-a, --anhängen

standardeingabe an die Auswahl anhängen. Impliziert - i .

-F, -Folgen

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

-i, --input

standardeingabe in die Auswahl einlesen.

Ausgabeoptionen

-o, --output

schreiben Sie die Auswahl in die Standardausgabe.

Aktionsoptionen

-c, --klar

auswahl aufheben. Überschreibt alle Eingabeoptionen.

-d, --delete

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, die ausgewählten Inhalte zu löschen. Überschreibt alle Eingabeoptionen.

Auswahlmöglichkeiten

-p, --primär

betätigen Sie die PRIMARY-Auswahl (Standardeinstellung).

-s, --secondary

bedienen Sie die Auswahl SEKUNDÄR.

-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, s für SECONDARY, b für CLIPBOARD, o für die Ausgabe.

Beispiel: Angenommen, ich möchte die Ausgabe von foo aus einem TTY kopieren und auf einer Webseite für einen Fehlerbericht einfügen. Dazu ist es ideal, in die/aus der TTY/X-Sitzung zu kopieren. Die Frage lautet also , wie ich vom TTY aus auf die Zwischenablage zugreifen kann.

In diesem Beispiel wird davon ausgegangen, dass die X-Sitzung auf dem Display :1 angezeigt wird.

$ 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 es Ctrl-V wie gewohnt in die Form bringen.

Sagen Sie jetzt, dass mir jemand auf der Support-Website einen Befehl zum Ausführen gibt, 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

Pizza bestellen scheint eine produktive Verwendung der Befehlszeile zu sein.

... weitergehen.

Vim

Bei der Kompilierung mit +clipboard (Dies ist wichtig! Überprüfen Sie Ihren vim --version) sollte Vim Zugriff auf die Auswahlmöglichkeiten X PRIMARY und CLIPBOARD haben. Die beiden Auswahlen sind über die Register * und + zugänglich und können wie jedes andere Register nach Belieben beschrieben und gelesen 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 direkten Zugriff auf X-Auswahlen nicht unterstützt, ist dies nicht das Ende der Welt. Sie können einfach die Technik xsel verwenden, wie im letzten Abschnitt beschrieben.

: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 Tastenkombinationen und Sie sollten gut sein.

2
Braden Best

in macOS benutze pbpaste

z.B:

aktualisieren Sie die Zwischenablage

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

genießen.

1
jiahut

Wenn Sie wie ich auf einem Linux-Server ohne Root-Rechte und ohne xclip oder gpm arbeiten, können Sie dieses Problem umgehen, indem Sie nur eine temporäre Datei verwenden. Zum Beispiel:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world
1
horta

Ich habe eine gute Referenz gefunden: https://unix.stackexchange.com/questions/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 Befehl tee mit einem Dateideskriptor verwendet:

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

>() ist eine Form der Prozessersetzung. bash ersetzt jeweils den Pfad zu einem Dateideskriptor, der mit der Standardeingabe des Programms in Klammern verbunden ist.

Der Befehl tee gibt Ihren Befehl aus und ermöglicht es Ihnen, den Inhalt zu "leiten" und das Ergebnis auf der Standardausgabe "stdout" anzuzeigen.

sie können auch Aliase zum Abrufen und Schreiben in der Zwischenablage erstellen, sodass Sie "pbcopy" und "pbpaste" so verwenden können, als ob Sie sich auf einem MAC befinden. In meinem Fall, wenn ich zsh verwende, habe ich dies in meiner Aliase-Datei:

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

der (( $+command[name] )) in zsh testet, ob der Befehl "name" auf Ihrem System installiert ist. Dann werden beide Aliase mit {} gruppiert. der && ist ein binäres UND, wenn a dann b, dann werden die Aliase gesetzt, wenn Sie xclip haben.

echo "another test" | tee >(pbcopy)

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

pbpaste | "any-command-you-need-here"
1
SergioAraujo

Obwohl> 1 Jahr später, teile ich eine etwas andere Lösung. Hoffe, das ist nützlich für jemanden.

Gestern habe ich mich mit der Frage befasst: "Wie teile ich die Zwischenablage zwischen verschiedenen Benutzersitzungen?". Beim Umschalten zwischen Sitzungen mit ctrlaltF7 - ctrlaltF8In der Tat können Sie nicht einfügen, was Sie kopiert haben.

Ich habe die folgende quick & dirty Lösung gefunden, basierend auf einer Named Pipe. Es ist sicherlich ziemlich kahl und roh, aber ich fand es funktionell:

[email protected]:~$ mkfifo /tmp/sharedClip

dann im sendeterminal

[email protected]:~$ cat > /tmp/sharedClip

zuletzt im empfangenden Terminal:

[email protected]:~$ cat /tmp/sharedClip

Nun tippst oder fügst du etwas in das erste Terminal ein und (nachdem du es getroffen hast return) wird es sofort im empfangenden Terminal angezeigt, von wo aus Sie an einer beliebigen Stelle erneut kopieren/einfügen können.

Dabei wird natürlich nicht nur der Inhalt aus der Zwischenablage von Benutzer1 verwendet, um ihn in der Zwischenablage von Benutzer2 verfügbar zu machen, sondern es sind zusätzliche Klicks zum Einfügen und Kopieren erforderlich.

0
lurix66

Es gibt auch xclip-copyfile .

0