Qu'est-ce qui ressemble à pbcopy pour Linux sous OSX?

141

Dans un terminal sous OSX, je peux diriger la sortie vers pbcopy, puis aller dans un navigateur Web et la coller. J'ai essayé cela sous Linux avec xcopy, mais lorsque je bascule vers le navigateur, il écrase simplement le presse-papiers avec ce qu'il contenait lors de la dernière utilisation du navigateur. Qu'est-ce qui fonctionne comme pbcopy sous Linux?

tony_sid
la source
2
... et pour ceux qui ne savent pas ce que pbcopy est, voici la page de manuel developer.apple.com/library/mac/#documentation/Darwin/Reference/…
Rob Cowell -
ClipIt (et les gestionnaires de presse-papiers similaires) est un outil qui peut être utile à cet égard . Non seulement cela joue bien dans le terminal, mais cela préserve l’historique du presse-papier. Plutôt utile.
brandizzi

Réponses:

162

Si vous avez installé X, vous pouvez essayer xsel de cette façon:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

ou avec xclip:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

maintenant vous pouvez les utiliser:

echo 'go to my clipboard' | pbcopy

quand je n'ai pas XI, utilise la fonctionnalité GNU Screen pour copier entre des shells ouverts dans une session à l'aide du clavier

copier : Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

coller : Ctrl-a + ]

* les mouvements sont effectués avec vim comme les raccourcis clavier (j, k, l & m).

amisé
la source
1
Merci c'est exactement l'information que je voulais. Maintenant, je me demande s’il est possible de faire en sorte que Screen me laisse utiliser les commandes Emacs pour sélectionner la zone que je veux copier ...
Noah Sussman
8
xsel: Impossible d'ouvrir l'affichage: (null): ioctl inapproprié pour le périphérique
itsazzad
J'ai résolu le problème "Impossible d'ouvrir l'affichage" sous Windows en installant Xming et en réglant DISPLAY =: 0
scottgwald
1
Pour les utilisateurs de tmux, c’est plus comme si Ctrl-b, [ -> go to position -> Space -> select texts -> Enteret coller parCtrl-b, ]
elquimista
Dans la mesure du possible - s'il s'agit de quelque chose de permanent que vous souhaitiez, bien sûr - plutôt que de compliquer votre espace de noms avec des alias dans votre profil, il sera préférable de créer un script de base pour cela dans /bin/. Surtout si vous partagez votre profil entre des machines macOS et linux.
Benjamin R
9

Placez un script comme celui-ci appelé pbcopy dans votre dossier bin:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

Cela mettra STDIN à la fois dans votre tampon de sélection et dans le presse-papiers:

echo Hello world |pbcopy
Erik
la source
Pourquoi serait- catil nécessaire? Ne va-t-il pas simplement rediriger stdin vers stdout dans ce cas, donc un abus de chat inutile ou suis-je en train de manquer quelque chose?
Hultner
2
Vous avez raison, cela ressemble à une abus de chat inutile :-)
Erik
2
si vous vous demandez (comme moi) où se trouve le mystérieux "chat inutile", il a été supprimé par l'édition. NTS: en cas de commentaires déroutants, consultez l'historique ^^ '
yaitloutou le
Comment collez-vous le contenu après avoir utilisé cela? Juste en utilisant xclip -o? Ou y a-t-il un meilleur moyen?
n1k31t4
@ n1k31t4 Ce que j'ai fait était de créer un script équivalent en utilisant xclip -sel c -opour un script sur /bin/pbpaste.
Benjamin R
5

Développer les solutions de @Erik et @xpixelz; ces deux scripts devraient fonctionner sur les deux plateformes:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi
Wes Turner
la source
Mais pourquoi voudriez-vous même avoir ce script sur OS X où il fait partie de l’utilisateur natif?
Hultner
* à titre de référence pour des fonctionnalités similaires, * fichiers de points
Wes Turner -
Encore des abus de chat et pourquoi ne pas vérifier si xclip existe à la place et attribuer un alias si c'est le cas? Ou vérifiez si le binaire pbpaste existe serait également une option. Vérifier le nom de domaine semble être une approche étrange du problème.
Hultner
2
@Hultner "La vérification de l'uname semble être une approche étrange du problème" Vous pouvez également vérifier les fichiers binaires, de préférence, dans l'ordre, par exception avec des affectations a et ${a:-${b:-${c:+${d}}}}quelques type -P/ hasvariable et des exécutants / bin / test.
Wes Turner
2

Cette réponse fait référence au sous-système Linux pour Windows.

Réponse courte: utilisez-la clip.execomme si c'était pbcopypour mettre quelque chose dans le presse-papier de Windows. C'est magique. Exemple echo "Hello Windows" | clip.exedans votre terminal bash ou Ubuntu bash, puis ctrl-v dans un programme Windows.

Plus de contexte:

Dans un commentaire ci-dessus, j'ai mentionné que, lors de l'utilisation de Xming sous Windows pour activer cette fonctionnalité, il est nécessaire de définir une variable DISPLAY ( export DISPLAY=:0, dans de nombreux cas) avant que les solutions xselet ne xclipfonctionnent. Ce qui est scandaleux, c'est que cette solution fonctionne de manière stochastique et peu fiable: lors du collage de Linux à Windows, une pression ctrl-ventre une et dix fois provoque le collage du presse-papiers (une fois) (cela se trouve sur Windows 10 Surface Book 2). Ne perdez pas votre temps, utilisez clip.exe.

NOTE: N'oubliez pas le .exe. Sinon, Ubuntu bash vous proposera d'installer le paquet Linux geomview, ce qui n'est pas ce que vous voulez.

scottgwald
la source