Tuyau vers / depuis le presse-papiers dans le script Bash

Est-il possible de diriger vers/depuis le presse-papiers dans Bash?

Qu'il s'agisse de la tuyauterie vers/depuis une poignée de périphérique ou de l'utilisation d'une application auxiliaire, Je ne trouve rien.

Par exemple, si /dev/clip était un périphérique reliant le presse-papiers, nous pourrions faire:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard
728
demandé sur jww 2009-04-15 02:06:47

23 réponses

Vous êtes un peu ambigu. Je m'attends à ce que vous soyez probablement un utilisateur Linux à L'intérieur de X qui veut mettre des choses dans le presse-papiers X PRIMARY.

Il est important de comprendre que bash n'a pas de presse-papiers. Il n'y a pas une telle chose comme "le" presse-papiers, parce que {[1] } peut fonctionner sur Windows, Mac OS X, beaucoup d'autres systèmes d'exploitation, à L'intérieur X, à L'extérieur X,... Sans oublier que X lui-même a trois presse-papiers différents. Il y a une multitude de presse-papiers avec lesquels vous pourriez avoir affaire. Habituellement le presse papiers que vous voulez parler a un utilitaire qui vous permet de parler à elle.

Dans le cas de X, oui, il y a xclip (et d'autres). xclip -selection c enverra des données au presse-papiers qui fonctionne avec Ctrl-C, Ctrl-V dans la plupart des applications.

Si vous essayez de parler au presse-papiers de Mac OS X, il y a pbcopy.

Si vous êtes en mode terminal Linux (pas de X) alors peut - être que vous devez regarder dans gpm.

Il y a aussi GNU screen qui a un presse-papiers. Pour mettre des choses là-dedans, regardez la commande screen "readreg".

Sous Windows / cygwin, utilisez /dev/clipboard ou clip pour les nouvelles versions de Windows (Au Moins Windows 10).

680
répondu lhunath 2017-01-30 17:07:45

Assurez-vous que vous utilisez alias xclip="xclip -selection c" sinon, vous ne pouvez pas simplement utiliser pour Ctrl+v pour collez-le dans un endroit différent.

echo test | xclip    

Ctrl+v === test

207
répondu doug 2012-11-13 02:25:57

Installer

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

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Si vous n'avez pas accès à apt-get ni pacman ni dnf, les sources sont disponibles sur sourceforge.

Configuration

Bash

Dans ~/.bash_aliases, Ajouter:

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

n'oubliez pas de charger votre nouvelle configuration en utilisant . ~/.bash_aliases ou en redémarrant votre profil.

Poisson

Dans ~/.config/fish/config.fish, ajouter:

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

n'oubliez pas de redémarrer votre instance fish en redémarrant votre terminal pour appliquer.

Utilisation

Vous pouvez maintenant utiliser setclip et getclip, e.g:

$ echo foo | setclip
$ getclip
foo
128
répondu tleb 2017-08-30 13:27:49

Sur Mac OS X, vous pouvez trouver ces outils de ligne de commande à portée de main:

EXEMPLE:

cat ~/.bashrc | pbcopy

Après cette commande, le contenu du fichier ~/.bashrc sera disponible pour coller avec cmd+v raccourci.

107
répondu jtruelove 2017-07-18 00:13:01

Essayez

xclip

xclip - command line interface to X selections (clipboard) 

L'Homme

33
répondu Zoredache 2013-05-13 00:30:36

Xsel sur 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

Installer

sudo apt-get install xsel
17
répondu Andrew_1510 2015-08-18 15:14:34

Voici un script bash prêt à l'emploi pour lire le presse-papiers qui fonctionne sur plusieurs plates-formes. Veuillez modifier le script ici si vous ajoutez des fonctionnalités (par exemple, plus de plates-formes).

#!/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
10
répondu Wolfgang Fahl 2015-03-14 16:35:25

Sur Windows (avec Cygwin) essayez cat /dev/clipboard ou echo "foo" > /dev/clipboard comme mentionné dans Cet article.

9
répondu Norman H 2011-05-31 13:33:27

Pour Mac uniquement:

echo "Hello World" | pbcopy
pbpaste

Ils sont situés /usr/bin/pbcopy et /usr/bin/pbpaste.

9
répondu nyitguy 2015-06-07 11:56:14

Il existe différents presse-papiers sous Linux; le serveur X en a un, le gestionnaire de fenêtres peut en avoir un autre, etc. Il n'existe pas de standard de l'appareil.

Oh, oui, sur CLI, le programme d'écran a son propre presse-papiers, tout comme d'autres applications comme Emacs et vi .

Dans X, vous pouvez utiliser xclip.

Vous pouvez vérifier ce fil pour d'autres réponses possibles: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

8
répondu Sunny Milenov 2016-09-12 21:43:32

Wow, je ne peux pas croire combien de réponses il y a pour cette question. Je ne peux pas dire que je les ai tous essayés mais j'ai essayé le top 3 ou 4 et aucun d'entre eux ne fonctionne pour moi. Ce qui a fonctionné pour moi était une réponse située dans l'un des commentaires écrits par un utilisateur appelé doug. Comme je l'ai trouvé si utile, j'ai décidé de reformuler dans une réponse.

Installez l'utilitaire xcopy et lorsque vous êtes dans le Terminal, Entrez:

Copie

Thing_you_want_to_copy|xclip -selection c

Coller

myvariable=$(xclip -selection clipboard -o)

, j'ai remarqué beaucoup de réponses recommandé pbpaste et pbcopy. Si vous êtes dans ces utilitaires, mais pour une raison quelconque, ils ne sont pas disponibles sur votre repo, vous pouvez toujours créer un alias pour les commandes xcopy et les appeler pbpaste et pbcopy.

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

Alors cela ressemblerait à ceci:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
7
répondu thebunnyrules 2017-12-11 06:20:05

Copier et coller dans le presse-papiers dans Windows (Cygwin):

Voir:

$ clip.exe?

CLIP Description: Redirige la sortie des outils de ligne de commande vers le presse-papiers Windows. Cette sortie de texte peut ensuite être collée dans d'autres programmes. Liste Des Paramètres: /? Affiche ce message d'aide. Exemple: DIR / CLIP place une copie du répertoire courant liste dans le presse-papiers de Windows. CLIP

Existe aussi getclip (peut être utilisé à la place de shift+ins!), putclip (echo oaeuoa / putclip.exe pour le mettre dans le clip)

5
répondu Stenemo 2013-06-21 05:46:14

Sur le sous-système Windows pour Linux, vous pouvez copier dans le presse-papiers avec clip.EXE.

cat file | clip.exe

Gardez à l'esprit d'utiliser la | tuyau de commande. Et pas une commande >, puisque cela ne fonctionnera pas.

5
répondu knowledge_is_power 2018-03-28 14:17:41

C'est un script Python simple qui fait exactement ce dont vous avez besoin:

#!/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())

Enregistrez ceci en tant qu'exécutable quelque part dans votre chemin (je l'ai enregistré dans /usr/local/bin/clip. Vous pouvez envoyer des choses à enregistrer dans votre presse-papiers...

echo "Hello World" | clip

Et vous pouvez diriger ce qui est dans votre presse-papiers vers un autre programme...

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

L'exécuter seul affichera simplement ce qui est dans le presse-papiers.

4
répondu tysweat 2016-09-12 21:44:57
  xsel -b

Fait le travail pour x11, il est principalement déjà installé. Un coup d'oeil dans la page de manuel de xsel vaut l'effort.

2
répondu Martin Fischer 2015-06-11 21:04:26

Si vous êtes comme moi et que vous exécutez sur un serveur linux sans privilèges root et qu'il n'y a pas de xclip ou de gpm, vous pouvez contourner ce problème en utilisant simplement un fichier temporaire. Par exemple:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world
2
répondu horta 2015-09-17 17:48:49

Quelques programmes Windows que j'ai écrits il y a des années. Ils vous permettent de vider, pousser, ajouter et imprimer le presse-papiers. Cela fonctionne comme ceci:

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

Il inclut le code source: cmd_clip.zip

2
répondu jeng 2016-09-12 21:44:10

Il y a deux façons. Certaines des façons qui ont été mentionnées incluent (je pense) tmux, screen, vim, emacs et le shell. Je ne connais pas emacs ou screen, donc je vais passer en revue les trois autres.

Tmux

Bien qu'il ne s'agisse pas D'une sélection X, tmux dispose d'un mode de copie accessible via prefix-[ (prefix est Ctrl+B par défaut). Le tampon utilisé pour ce mode est séparé et exclusif à tmux, ce qui ouvre pas mal de possibilités et le rend plus polyvalent que le X sélections dans les bonnes situations.

Pour quitter ce mode, frappé q; pour naviguer, utilisez votre vim ou emacs liaison (par défaut = vim), donc hjkl pour le mouvement, v/V/C-v pour des caractères/ligne/sélection de bloc, etc. Lorsque vous avez votre sélection, appuyez sur entrez pour copier et quitter le mode.

Pour coller à partir de ce tampon, utilisez prefix-].

Coquille

Toute installation de X11 semble venir avec deux programmes par défaut: xclip et xsel (un peu comme la façon dont cela vient avec startx et xinit). La plupart des autres réponses mention xclip, et j'aime vraiment xsel, pour sa concision, je vais couvrir xsel.

À Partir de xsel(1x):

Options D'entrée

- a, -- append

Ajoute une entrée standard à la sélection. Implique -i.

- f, -- suivre

Ajouter à la sélection à mesure que l'entrée standard augmente. Implique -i.

- i, -- input

Lire l'entrée standard dans la sélection.

Options de sortie

- o, -- sortie

Ecrire la sélection dans la sortie standard.

Options D'Action

- c, -- effacer

Effacer la sélection. Remplace toutes les options d'entrée.

-d, --delete

Demande que la sélection actuelle soit supprimée. Cela efface non seulement la sélection, mais demande également au programme dans lequel la sélection réside que le contenu sélectionné sera supprimé. Remplace toutes les options d'entrée.

Options de sélection

- p, -- primaire

Fonctionne sur la sélection primaire (par défaut).

-s, --secondaire

Opérer sur la sélection secondaire.

-b, --presse-papiers

Fonctionne sur la sélection du presse-papiers.

Et c'est à peu près tout ce que vous devez savoir. p (ou rien) pour PRIMARY, s pour SECONDARY, b pour CLIPBOARD, o pour sortie.

Exemple: disons que je veux copier la sortie de foo à partir d'un TTY et la coller sur une page Web pour un rapport de bogue. Pour ce faire, il serait idéal de copier vers / depuis la session TTY/X. Donc, la question devient Comment puis-je accéder au presse-papiers à partir du TTY?

Pour cet exemple, nous supposerons que la session X est affichée :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

Alors je peux Ctrl-V dans la forme comme d'habitude.

Maintenant, dites que quelqu'un sur le site de support me donne une commande pour exécutez pour résoudre le problème. C'est compliqué et long.

$ 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 de commande semble être une utilisation productive de la ligne de commande.

...aller de l'avant.

Vim

Si compilé avec +clipboard (C'est important! Vérifiez votre vim --version), Vim devrait avoir accès aux sélections X PRIMARY et CLIPBOARD. Les deux sélections sont accessibles à partir des registres * et +, respectivement, et peuvent être écrites et lues à votre guise comme n'importe quel autre inscrire. Par exemple:

:%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

Si votre copie de vim ne prend pas directement en charge l'accès aux sélections X, ce n'est pas la fin du monde. Vous pouvez simplement utiliser la technique xsel comme décrit dans la dernière section.

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

Liez quelques combos clés et vous devriez être bon.

2
répondu Braden Best 2017-05-11 04:36:16

À partir de ce thread, il existe une option qui ne nécessite aucune installation gclip/xclip/xsel logiciel tiers.

Un script perl (puisque perl est généralement toujours installé)

use Win32::Clipboard;
print Win32::Clipboard::GetText();
2
répondu VonC 2017-09-23 00:24:32

2018 réponse

Utiliser presse-papiers-cli. Il fonctionne avec macOS, Windows, Linux, OpenBSD, FreeBSD et Android sans aucun problème réel.

Installez-le avec:

npm install -g clipboard-cli

, Alors vous pouvez faire

echo foo | clipboard

Si vous le souhaitez, vous pouvez alias cb en mettant la ligne suivante dans votre .bashrc, .bash_profile, ou .zshrc:

alias cb=clipboard

2
répondu Evan Conrad 2018-04-05 19:13:22

Dans macOS utilisez pbpaste

Par exemple:

Mettre à jour le presse-papiers

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

Profitez.

1
répondu jiahut 2017-11-02 06:37:06

Il y a aussi xclip-copyfile .

0
répondu Jonathon Reinhart 2016-08-29 11:33:04

Bien que > 1 an plus tard, je partage une solution légèrement différente. Espérons que cela est utile pour quelqu'un.

Hier, je me suis retrouvé avec la question: " Comment partager le presse-papiers entre différentes sessions utilisateur?". Lors de la commutation entre les sessions avec ctrlaltF7 - ctrlaltF8, en fait, vous ne pouvez pas coller ce que vous avez copié.

J'ai trouvé la solution quick & dirty suivante, basée sur un tuyau nommé. Il est sûrement assez nu et cru, mais je l'ai trouvé fonctionnel:

user1@host:~$ mkfifo /tmp/sharedClip

Puis dans le terminal d'envoi

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

, Dernier, dans le terminal de réception:

user2@host:~$ cat /tmp/sharedClip

Maintenant, vous tapez ou collez n'importe quoi dans le premier terminal, et (après avoir appuyé sur return), il apparaîtra immédiatement dans le terminal de réception, d'où vous pourrez copier/coller à nouveau n'importe où.

Bien sûr, cela ne prend pas seulement strictement le contenu du presse-papiers de user1 pour le rendre disponible dans user2 presse-papiers, mais il nécessite plutôt une paire supplémentaire de clics coller et copier.

0
répondu lurix66 2016-10-07 12:55:02