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

948

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

Qu'il s'agisse de canaliser vers / depuis une poignée de périphérique ou d'utiliser une application auxiliaire, je ne trouve rien.

Par exemple, si /dev/clipun appareil était lié au 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
moinudin
la source
3
J'ai utilisé :%y+dans vim, qui est en vim pour "yank (copier) toutes les lignes dans le registre" + "(le PRIMARYpresse-papiers X )". Vous pouvez remplacer %par une plage si vous souhaitez ê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 contraste avec la xclipcommande mentionnée dans les réponses. 2. Si vous ne savez pas déjà comment 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 doit être activé par défaut dans l'interface graphique et les instances de terminal de vim.
Braden Best
1
@BradenBest, vous devriez mettre ceci comme réponse. Je suis dans un environnement NIX et je n'ai pas pu installer xclip. Votre réponse a fonctionné comme un charme.
HankCa
@HankCa D'accord, j'ai posté une réponse . Dis-moi ce que tu penses.
Braden Best
@BradenBest est une réponse très complète. J'ai juste aimé celui- :%y+là mais ok, vous avez toutes les bases couvertes! Bon.
HankCa
Autre option: utiliser un petit script perl: aucune installation requise. Voir ma réponse ci-dessous .
VonC

Réponses:

865

Il y a une multitude de presse-papiers avec lesquels vous pourriez avoir affaire. Je suppose que vous êtes probablement un utilisateur Linux qui veut mettre des trucs dans le presse-papiers principal de X Windows. Habituellement, le presse-papiers auquel vous souhaitez parler a un utilitaire qui vous permet de lui parler.

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

Si vous êtes sous Mac OS X, il y en a pbcopy. par exemplecat example.txt | pbcopy

Si vous êtes en mode terminal Linux (pas X) puis regardez dans gpmou écran qui a un presse - papiers. Essayez la screencommande readreg.

Sous Windows 10+ ou cygwin, utilisez /dev/clipboardou clip.

lhunath
la source
36
cygwin: / dev / clipboard
glenn jackman
24
sur Windows, /dev/clipboardfonctionne également pour les shells bash Msys / MinGW
Mihai Rotaru
71
Notez que xclip -selection ccela enverra des données au presse-papiers qui fonctionne avec ^ C, ^ V dans la plupart des applications
Klaas van Schelven
31
sur les nouvelles versions de fenêtres, vous pouvez simplement utiliser clipcomme ceci:dir | clip
maep
11
Il est triste que GNU / Linux ne dispose pas d'un tel appareil /dev/clipboardet oblige à installer soit xclip soit gpm qui est manquant par défaut au moins dans Kubuntu (je suppose que dans la plupart des autres distributions aussi) .
Hi-Angel
282

Assurez-vous que vous utilisez alias xclip="xclip -selection c" sinon vous ne pouvez pas simplement utiliser to Ctrl+ vpour le coller à un autre endroit.

echo test | xclip    

Ctrl+v === test

doug
la source
1
Comment procéder pour le coller sans cet argument de commande?
Jonah
15
xclip -selection clipboard -o
doug
32
puisque je fais beaucoup de va-et-vient entre osx et linux, j'ai ce qui suit dans mes fichiers dot. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" J'espère que cela pourra aider.
doug
15
@ApockofFork, xclipn'est pas l'ajout d'une nouvelle ligne, echoest. Essayez printf test | xclip -i -selection clipboard. ( printfn'ajoute pas de nouvelle ligne sauf si vous écrivez 'test\n'.)
David X
7
Ou utilisez echo -nau lieu de printf.
Christian Pietsch
182

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-getni pacman, ni dnf, les sources sont disponibles sur sourceforge .

Installer

Frapper

Dans ~/.bash_aliases, ajoutez:

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

N'oubliez pas de charger votre nouvelle configuration en utilisant . ~/.bash_aliasesou en redémarrant votre profil.

Poisson

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

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

N'oubliez pas de redémarrer votre instance de poisson en redémarrant votre terminal pour que les modifications s'appliquent.

Usage

Vous pouvez maintenant utiliser setclipet getclip, par exemple:

$ echo foo | setclip
$ getclip
foo
tleb
la source
3
Pour toutes les autres distributions: vous pouvez télécharger la source depuis sourceforge.net/projects/xclip
Scz
+1 Meilleure solution! Arch, sudo pacman -S xclip. Mais notez que ce .bashrcn'est pas le meilleur endroit. Je recommande à l'utilisateur final de lire les fichiers bashrc, bash_aliases et .profile appropriés et comment bash les gère. Astuce: placez-le plutôt dans .bash_aliases.
eduncan911
1
Merci @ eduncan911! :) Ajout de la possibilité d'utiliser le pacmangestionnaire de paquets et suppression de la .bashrcproposition. Je sais que .bash_aliasesc'est plus adapté, mais le résultat final est le même ( .bashrcnécessite simplement .bash_aliasess'il existe). Si les gens veulent un système désordonné, laissez-les en avoir un. :)
tleb
@EladTabak Heureux que cela ait aidé.
tleb
1
@jpaugh vous avez raison. mes .bashrcsources .bash_aliasesà la fin. ;) Je respecte cette ancienne convention, qui reste 100% compatible sur les variantes Arch, Ubuntu / Debian, Raspberry, macOS / OSX et Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Avec cette convention, j'utilise les mêmes fichiers de points sur toutes les machines Je touche. C'est assez sympa: github.com/eduncan911/dotfiles
eduncan911
143

Sur macOS, utilisez les commandes intégrées pbcopyet pbpaste.

Par exemple, si vous exécutez

cat ~/.bashrc | pbcopy

le contenu du ~/.bashrcfichier sera disponible pour coller avec le raccourci Cmd+ v.

jtruelove
la source
37

Essayer

xclip

xclip - command line interface to X selections (clipboard) 

homme

Zoredache
la source
25

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
Andrew_1510
la source
En quoi cela diffère- echo "foo" | xclip -selection ct-il?
Léo Léopold Hertz 준영
Il y a quelques réponses à cette réponse Ask Ubuntu , mais principalement xselet xclipsont équivalentes à tous les égards sauf qu'il xclippeut lire / écrire des fichiers par nom, mais xselnécessite une redirection de shell si vous voulez accéder à un fichier.
Colin D Bennett
xselfonctionne bien à partir de scripts, tandis que xclip ne fonctionne qu'à partir de l'invite. Pas certain de pourquoi.
NVRM
16

Wow, je ne peux pas croire combien il y a de réponses à 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'eux ne fonctionne pour moi. Ce qui a fonctionné pour moi, c'est 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 ma réponse.

Installez l'utilitaire xcopy et lorsque vous êtes dans le terminal, saisissez:

Copie

Thing_you_want_to_copy|xclip -selection c

Pâte

myvariable=$(xclip -selection clipboard -o)

J'ai remarqué beaucoup de réponses recommandées pbpaste et pbcopy. Si vous êtes dans ces utilitaires mais pour une raison quelconque, ils ne sont pas disponibles sur votre dépôt, 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)
thebunnyrules
la source
Génial, votre partie alias correspond assez bien à MacOS.
MeadowMuffins
15

Réponse 2018

Utilisez clipboard-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

Ensuite, vous pouvez faire

echo foo | clipboard

Si vous voulez, vous pouvez alias cben mettant ce qui suit dans votre .bashrc, .bash_profileou .zshrc:

alias cb=clipboard

Evan Conrad
la source
2
Êtes-vous sûr que c'est un npmemballage sûr ?
Johnny
3
@Stas, je l'espère, il est fait par Sindresorhus ( github.com/sindresorhus ), le contributeur de nœud le plus prolifique. Il est responsable de la bibliothèque de tests Ava, du xo linter, de Yeoman et d'innombrables autres projets. Il est également responsable d'innombrables petites bibliothèques comme celle-ci, qui mettent collectivement son code sur presque tous les sites Web utilisant JS sur Internet. Cela ne veut pas dire qu'il ne pouvait pas être compromis; juste que la quantité d'yeux sur ses repos et sa propre réputation le rendent beaucoup moins probable que la plupart des repos npm aléatoires.
Evan Conrad
Cool! Travailler sur Ubuntu GNU / Linux où xclip ne fonctionne pas.
Kevin Buchs
14

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

cat file | clip.exe

N'oubliez pas d'utiliser la |commande pipe. Et pas une >commande, car cela ne fonctionnera pas.

knowledge_is_power
la source
11

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 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
Wolfgang Fahl
la source
bruhh, cela fonctionne réellement pourquoi n'est-ce pas la réponse?
255.tar.xz
9

Sous Windows (avec Cygwin), essayez cat /dev/clipboardou echo "foo" > /dev/clipboardcomme mentionné dans cet article.

Norman H
la source
1
Comme l'utilisateur @maep l'a mentionné dans un commentaire séparé, les versions plus récentes de Windows (je ne peux que confirmer pour Win10) peuvent simplement être dirigées vers clip. J'utilise msysgit 1.9.5 et cela a fonctionné.
Shawn Erquhart
echo "foo" > /dev/clipboardsemble détruire complètement les sauts de ligne (pas une chose \ r \ n \ n mais complètement disparu)
user1529413
9

Pour Mac uniquement:

echo "Hello World" | pbcopy
pbpaste

Ils sont situés /usr/bin/pbcopyet /usr/bin/pbpaste.

nyitguy
la source
8

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'y a pas de périphérique standard.

Oh, oui, sur CLI, le programme d'écran a également 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

Sunny Milenov
la source
2
On dirait que créer / dev / clip serait un bon projet pour quelqu'un.
TED le
2
Je connais parfaitement les multiples presse-papiers. Comment cela rend-il ma question plus difficile à répondre?
moinudin
Cela aurait du sens si les presse-papiers étaient standardisés, cela ne ferait probablement pas de mal si vous pouviez utiliser / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> pour y accéder, le seul problème est qu'ils sont spécifiques à l'utilisateur et les périphériques sont à l'échelle du système. Mais si vous créez un pilote de périphérique noyau qui masque en fonction de l'UID d'accès, il devrait fonctionner comme prévu.
5

Copiez et collez dans le presse-papiers dans Windows (Cygwin):

Voir:

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

Il existe également getclip (il peut être utilisé à la place de Shift+ Ins!) Et putclip (echo oaeuoa | putclip.exe pour le mettre dans le clip).

Stenemo
la source
4

Il s'agit d'un simple script Python 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-le en tant qu'exécutable quelque part sur votre chemin (je l'ai enregistré dans /usr/local/bin/clip. Vous pouvez ajouter des éléments à enregistrer dans votre presse-papiers ...

echo "Hello World" | clip

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

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

Le faire fonctionner seul affichera simplement le contenu du presse-papiers.

tysweat
la source
Cela fonctionne lorsque vous êtes sur un seul ordinateur, mais ne vous permettra pas de copier des choses entre ordinateurs.
Charles Plager
semble seulement `echo str> tmpfile` et cat tmpfile, pas le fonctionnement du presse-papiers. // identique aux réponses @horta.
yurenchen
cela ne semble pas définir la variable du presse-papiers, donc je ne peux pas coller le contenu dans une autre application - ce n'est pas un vrai presse-papiers!
jena
4

J'ai trouvé une bonne référence: /unix/69111/

Dans mon cas, je voudrais coller du contenu dans le presse-papiers et également voir ce qui y a été collé, j'ai donc également utilisé la teecommande avec un descripteur de fichier:

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

>()est une forme de substitution de processus. bash remplace chacun par le chemin d'accès à un descripteur de fichier qui est connecté à l'entrée standard du programme entre parenthèses.

La teecommande bifurque votre commande vous permettant de "diriger son contenu" et de voir le résultat sur la sortie standard "stdout"

vous pouvez également créer des alias à obtenir et à écrire dans le presse-papiers, vous permettant d'utiliser "pbcopy" et "pbpaste" comme si vous étiez sur MAC. Dans mon cas, comme j'utilise zsh, je l'ai sur mon fichier d'alias:

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

le (( $+command[name] ))dans les tests zsh si la commande « nom » est installé sur votre système, les alias sont regroupés avec {}. l' &&est un binaire et, si alors b, donc si vous avez xclip alors les alias sera défini.

echo "another test" | tee >(pbcopy)

Pour obtenir le contenu de votre presse-papiers, tapez simplement:

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

Fait le travail pour X Window, et il est pour la plupart déjà installé. Un coup d'œil dans la page de manuel de xsel en vaut la peine.

Martin Fischer
la source
2

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 comprend le code source: cmd_clip.zip

jeng
la source
2

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 ni emacs ni écran, je vais donc 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-[( prefixest Ctrl+ Bpar 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 les sélections X dans les bonnes situations.

Pour quitter ce mode, appuyez sur q; pour naviguer, utilisez votre vimou emacsliaison (par défaut = vim), donc hjklpour le mouvement, v/V/C-vpour la sélection de caractère / ligne / bloc, etc. Lorsque vous avez votre sélection, appuyez sur Enterpour copier et quitter le mode.

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

coquille

Toute installation de X11semble venir avec deux programmes par défaut: xclipet xsel(un peu comme la façon dont elle est également fournie avec les deux startxet xinit). La plupart des autres réponses mentionnent xclip, et j'aime beaucoup xselpour sa brièveté, donc je vais couvrir xsel.

De xsel (1x) :

Options de saisie

-a, --append

ajouter 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

écrire la sélection sur la sortie standard.

Options d'action

-c, - clair

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

-d, --delete

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

Options de sélection

-p, --primaire

opérer sur la sélection PRIMAIRE (par défaut).

-s, --secondaire

opérer sur la sélection SECONDAIRE.

-b, --clipboard

opérer sur la sélection CLIPBOARD.

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

Exemple: disons que je veux copier la sortie d' fooun ATS 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. La question devient donc comment 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

Ensuite, je peux Ctrl-Vle mettre dans le formulaire comme d'habitude.

Supposons maintenant que quelqu'un sur le site d'assistance me donne une commande à exécuter 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

La commande de pizza semble être une utilisation productive de la ligne de commande.

... continuons.

Vigueur

S'il est compilé avec +clipboard(C'est important! Vérifiez votre vim --version), Vim devrait avoir accès au X PRIMARYet aux CLIPBOARDsélections. Les deux sélections sont accessibles à partir des registres *et +, respectivement, et peuvent être écrites et lues à votre guise comme n'importe quel autre registre. 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 xseltechnique décrite 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.

Braden Best
la source
N'oubliez pas de toujours utiliser DISPLAY=lors de l'appel d'une application X à partir d'un environnement non X. Les applications X ont besoin de la DISPLAYvariable d'environnement pour déterminer à quel serveur (ou y a-t-il un seul serveur gérant plusieurs sessions?) Auquel elles parlent. Essayez DISPLAY=:1 firefox(ou quel que soit votre ID d'affichage; le mien se trouve être :1) à partir d'un ATS, par exemple.
Braden Best
Pour moi, le choix dans mon environnement était :%y+dans VIM.
HankCa
2

À partir de ce fil, il existe une option qui ne nécessite l'installation d'aucun logiciel gclip/ xclip/ xseltiers.

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

use Win32::Clipboard;
print Win32::Clipboard::GetText();
VonC
la source
Comment pourrais-je l'utiliser? Enregistrer le script dans PATH et le canaliser? J'essaie d'écrire le wrapper cli de dropbox pour copier les liens de partage, donc j'en ai juste besoin pour gérer le texte.
jena
2

pbcopy est construit dans OSX:

Copie du contenu de .bash_profile:

cat ~/.bash_profile | pbcopy
Skulas
la source
1

Sous macOS, utilisez pbpaste.

Par exemple:

Mettre à jour le presse-papiers

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

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!
Horta
la source
Je ne vois pas en quoi un manque de privilèges root y contribue.
Braden Best
3
@BradenBest Le manque de privilèges root signifie que je n'ai pas pu installer les choses.
horta
Mais qu'allez-vous installer? X? Sur un serveur? À moins que vous hébergiez un service de transfert X étrange, je ne vois pas pourquoi vous voudriez jamais le faire.
Braden Best
@BradenBest Pas sûr. Quel que soit le programme ou le service qui me permettrait d'effectuer un copier-coller.
horta
1
Eh bien, si vous utilisez l'un des X selections(ce qui est nécessairement impliqué par "presse-papiers" et toute mention de xclip / xsel), vous avez besoin d'une session X active (et donc d'un serveur X) afin que vous puissiez accéder à la sélection dans le première place. Pour voir ce que je veux dire, essayez de courir DISPLAY="" xselsur votre machine locale. Il se fermera sur une erreur, étant incapable de trouver la session "", et aucune interaction avec aucune sélection X ne sera effectuée. C'est pourquoi j'ai d'abord dit que je ne vois pas comment les privilèges root entrent en ligne de compte: root ou pas de root, vous ne trouverez probablement pas une sélection X utile dans un environnement de serveur.
Braden Best
1

Sous Linux, cela fonctionne:

cat filename | xclip
Tobias Kwant
la source
1

sur Wayland xcopy ne semble pas fonctionner, utilisez plutôt wl-clipboard . par exemple sur fedora

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file
Jens Timmerman
la source
0

Bien que> 1 an plus tard, je partage une solution légèrement différente. J'espère 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?" . Lorsque vous basculez entre les sessions avec ctrlaltF7- ctrlaltF8, en fait, vous ne pouvez pas coller ce que vous avez copié.

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

user1@host:~$ mkfifo /tmp/sharedClip

puis dans le terminal d'envoi

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

enfin, dans le terminal récepteur:

user2@host:~$ cat /tmp/sharedClip

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

Bien sûr, cela ne prend pas uniquement le contenu du presse-papiers de l'utilisateur1 pour le rendre disponible dans le presse-papiers de l'utilisateur2, mais cela nécessite plutôt une paire supplémentaire de clics de collage et de copie.

lurix66
la source
Cela ne semble pas trop surprenant. Deux serveurs X différents = deux jeux de sélection différents. Cependant, vous pouvez configurer un script qui accepte les entrées / sorties via xsel/xclip. Par exemple, une extrémité écoute pour voir si l'une des sélections a changé, puis la redirige automatiquement (via le FIFO nommé) vers l'autre script, qui écoute un ou plusieurs canaux, qui l'insère dans sa propre sélection X. La copie de texte entraînerait donc automatiquement le même texte apparaissant dans la sélection de l'autre session X. Et n'oubliez pas $DISPLAY.
Braden Best
0

La doublure rubis m'a inspiré pour essayer avec du python.

Disons que nous voulons une commande qui met en retrait ce qui se trouve dans le presse-papiers avec 4 espaces. Parfait pour partager des extraits sur stackoverflow.

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

ce n'est pas une faute de frappe. Python a besoin de nouvelles lignes pour faire une boucle for. Nous voulons modifier les lignes en un seul passage pour éviter de créer un tableau supplémentaire en mémoire.

Si cela ne vous dérange pas de construire le tableau supplémentaire, essayez:

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

mais honnêtement, awk est meilleur pour cela que python. J'ai défini cet alias dans mon ~/.bashrcfichier

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

maintenant, lorsque je lance indenttout ce qui est dans mon presse-papiers, il est en retrait.

Harry Moreno
la source