1097 votes

Piping vers/depuis le presse-papiers dans un script Bash

Est-il possible de faire un pipe vers/depuis le presse-papiers en Bash ?

Qu'il s'agisse de piping vers/depuis un handle de périphérique ou de l'utilisation d'une application auxiliaire, je ne trouve rien.

Par exemple, si /dev/clip était un dispositif reliant au presse-papiers que nous pouvions faire :

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

4 votes

J'ai utilisé :%y+ dans vim, ce qui est le langage vim pour "tirer (copier) toutes les lignes dans le registre '+' (le registre X PRIMARY presse-papiers)". Vous pouvez remplacer % avec une fourchette si vous voulez être précis. Mais il y a trois mises en garde : 1. Maintenant, vous devez enregistrer le texte dans un fichier avant de pouvoir le copier. Ceci est en contraste avec la xclip commande mentionnée dans les réponses. 2. Si vous ne savez pas déjà comment utiliser vim, cela peut être fastidieux. 3. Vous ne pouvez le faire que si une certaine fonctionnalité est activée lors de la compilation de vim. Si vous installez GVim, il devrait être activé par défaut dans les instances GUI et terminal de vim.

1 votes

@BradenBest vous devriez mettre ceci en tant que réponse. Je suis dans un environnement NIX et j'ai été incapable d'installer xclip . Votre réponse a fonctionné comme un charme.

0 votes

@HankCa Ok, j'ai posté une réponse . Dites-moi ce que vous pensez.

988voto

lhunath Points 27045

Il y a une multitude de presse-papiers auxquels vous pourriez avoir affaire. Je suppose que vous êtes probablement un utilisateur de Linux qui veut mettre des choses dans le presse-papiers primaire de X Windows. En général, le presse-papiers auquel vous voulez vous adresser a un utilitaire qui vous permet de le faire.

Dans le cas de X, il y a xclip (et 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 êtes sur Mac OS X, il y a pbcopy . Par exemple, cat example.txt | pbcopy

Si vous êtes en mode terminal Linux (pas de X), regardez dans gpm o Écran qui dispose d'un presse-papiers. Essayez la commande Screen readreg .

Sous Windows 10+ ou Cygwin, utilisez /dev/clipboard o clip .

38 votes

Cygwin : /dev/clipboard

27 votes

Sur Windows, /dev/clipboard fonctionne également pour les shells bash de Msys/MinGW

74 votes

Notez que xclip -selection c enverra des données au presse-papiers qui fonctionne avec ^C, ^V dans la plupart des applications

325voto

doug Points 1133

Assurez-vous que vous utilisez alias xclip="xclip -selection c" sinon vous ne pourrez pas coller en utilisant Ctrl + v .

Exemple : Après l'exécution echo -n test | xclip , Ctrl + v collera test

1 votes

Comment faire pour le coller sans cet argument de commande ?

17 votes

xclip -selection clipboard -o

41 votes

Comme je fais beaucoup d'allers-retours entre osx et linux, j'ai les éléments suivants dans mes dotfiles. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" J'espère que cela vous aidera.

160voto

jtruelove Points 633

Sous macOS, utilisez la fonction intégrée pbcopy y pbpaste des commandes.

Par exemple, si vous exécutez

cat ~/.bashrc | pbcopy

le contenu de la ~/.bashrc sera disponible pour être collé avec la fonction Cmd + V raccourci.

Pour enregistrer le presse-papiers actuel dans un fichier, rediriger la sortie pbpaste dans un fichier :

pbpaste > my_clipboard.txt

40voto

Zoredache Points 8873

Essayez

xclip

xclip - command line interface to X selections (clipboard) 

homme

12voto

Wolfgang Fahl Points 1920

Voici un script Bash prêt à l'emploi pour lire le presse-papiers qui fonctionne sur plusieurs plateformes.

Veuillez modifier le script ici si vous ajoutez des fonctionnalités (par exemple, plus de plateformes).

#!/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 the 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X