Comment puis-je copier la sortie d'une commande directement dans mon presse-papiers?

529

Comment puis-je rediriger la sortie d'une commande dans mon presse-papiers et la coller à nouveau lors de l'utilisation d'un terminal? Par exemple:

cat file | clipboard
Légende
la source
doublon possible de Pipe vers / depuis le presse
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功
doublon possible de superuser.com/questions/104981/…
Champ
Je viens de poser une question connexe car je n'arrive pas à faire fonctionner xclip lors de la connexion à Ubuntu à partir de Git Bash sur Windows: stackoverflow.com/q/60117294/470749
Ryan
1
Enregistrez le contenu du fichier dans le presse-papiers. apt install xclipetcat file | xclip -sel clip
EsmaeelE

Réponses:

598

J'ai toujours voulu faire cela et j'ai trouvé un moyen agréable et facile de le faire. J'ai noté la procédure complète au cas où quelqu'un d'autre en aurait besoin.

Installez d'abord un programme de 16 Ko appelé xclip:

sudo apt-get install xclip

Vous pouvez ensuite diriger la sortie vers xclipà copier dans le presse-papiers:

cat file | xclip

Pour coller le texte que vous venez de copier, vous devez utiliser:

xclip -o

Pour simplifier la vie, vous pouvez configurer un alias dans votre fichier .bashrc comme je l'ai fait:

alias "c=xclip"
alias "v=xclip -o"

Pour voir à quel point cela est utile, imaginez que je veux ouvrir mon chemin actuel dans une nouvelle fenêtre de terminal (il peut y avoir d'autres façons de le faire comme Ctrl+ Tsur certains systèmes, mais c'est juste à des fins d'illustration):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Remarquez les ` ` alentours v. Celui-ci s'exécute d'abord vcomme une commande, puis la remplace sur place pour cdêtre utilisée.

Copiez uniquement le contenu dans le Xpresse - papiers

cat file | xclip

Si vous souhaitez coller ailleurs qu'une Xapplication, essayez celle-ci:

cat file | xclip -selection clipboard
Légende
la source
146
"cat file | xclip" copiez uniquement le contenu dans le presse-papiers 'X', si vous voulez coller ailleurs que dans une application 'X', essayez celle-ci: "cat file | xclip -selection clipboard"
khotyn
5
Votre choix de poignée est approprié!
Matt Joiner
4
Si vous souhaitez supprimer le caractère de nouvelle ligne afin de pouvoir directement coller et éditer le résultat de "pwd | c", vous pouvez faire "pwd | tr -d '\ n' | xclip -selection c"
Anake
12
définir alias "cs=xclip -selection clipboard"et alias "vs=xclip -o -selection clipboard"faciliter le copier / coller à partir du presse-papiers du système
Yibo Yang
1
Qu'en est-il d'une solution où je n'ai pas accès à sudo et où xclip n'est pas installé ??
DanGordon
179

Sous OS X, utilisez pbcopy; pbpasteva dans la direction opposée.

pbcopy < .ssh/id_rsa.pub
DavidPhillipOster
la source
14
Ouais! Juste comme ça pour ex:pbcopy < .ssh/id_rsa.pub
doublejosh
ne fonctionne pas pour la sortie de commande tho - par exemplepbcopy < git merge-base master some-branch
Ben
si vous utilisez tmux, cela ne fonctionnera que si vous rattachez votre session: superuser.com/a/413233/146254
Atav32
1
vous pouvez également utiliser cat, si vous travaillez déjà avec lui: cat file.txt | pbcopy
rtrigoso
3
Je sais que le commentaire a 5 ans, mais au cas où quelqu'un tomberait dessus à l'avenir, à utiliser avec la sortie de commande, faitesgit merge-base master some-branch | pbcopy
Sam
62

J'ai créé un outil pour Linux / OSX / Cygwin qui est similaire à certains de ces autres mais légèrement unique. Je l'appelle cbet il peut être trouvé dans ce gistub gistub .

Dans cet esprit, je montre comment faire du copier-coller via la ligne de commande en utilisant Linux, macOS et Cygwin.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

macOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Remarque: Je voulais à l'origine simplement mentionner cela dans mon commentaire à la réponse de Bob Enohp . Mais ensuite, j'ai réalisé que je devais ajouter un fichier README à mon contenu. Étant donné que l'éditeur gist n'offre pas d'aperçu de Markdown, j'ai utilisé la boîte de réponse ici et après l'avoir copiée / collée dans ma pensée gist, "je ferais aussi bien de soumettre la réponse."

cb

Un tee étanche au presse-papiers

Ce script est calqué sur tee(voir man tee).

C'est comme vos commandes de copier-coller normales, mais unifiées et capables de détecter quand vous voulez qu'elle soit chaînable

Exemples

Copie

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Pâte

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

Enchaînement

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

Copier via la redirection de fichiers

(chronologiquement, il était logique de faire une démonstration à la fin)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00
Bruno Bronosky
la source
Cela a fonctionné parfaitement pour moi pour copier une sortie de commande dans le presse-papiers dans le terminal sur macOS, merci!
Joshua Dyck
46

J'ai écrit ce petit script qui supprime les devinettes des commandes copier / coller.

La version Linux du script repose sur le fait que xclip est déjà installé sur votre système. Le script est appelé presse-papiers.

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

La version OS X du script repose sur pbcopy et pbpaste qui sont préinstallés sur tous les Mac.

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

L'utilisation du script est très simple car il vous suffit de diriger ou de quitter clipboardcomme indiqué dans ces deux exemples.

$ cat file | clipboard

$ clipboard | less
Bob Enohp
la source
3
J'utilise les noms pbcopyet pbpastesous Linux, donc cela fonctionne à la fois pour Linux et OS X.
StackedCrooked
Pour que le script fonctionne globalement dans ubuntu: * Enregistrez-le sur ~/.scripts/clipboard * Rendez-le exécutable chmod +x ~/.scripts/clipboard pour bash: * ajoutez export PATH=$PATH:~/.scriptsà la fin de ~/.bashrc pour fish: * ajoutez set PATH ~/.scripts $PATHà ~/.config/fish/fish.config Si l'un des fichiers ou dossiers n'existe pas déjà, créez-les.
Hockey
2
Vous pouvez également envelopper ce script en tant que fonction clipboard(){ ... }et le coller dans .bashrc
Sebastian Nowak
C'est très similaire à celui que j'ai fait, mais j'autorise le chaînage comme date | cb | tee -a updates.log. Cela enverrait la datesortie de la commande au presse-papiers et la transmettrait à la tee -acommande qui l'ajoute à un fichier et la transmet à stdout. Mais c'est comme un " tee étanche pour le presse-papiers" parce que si vous le faites, date | cbvous n'obtenez aucune sortie. Et enfin, il fait aussi cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky
Une suggestion - supprimez le caractère de fin de ligne pour éviter d'exécuter la commande lors du collage (par exemple si vous copiez-collez un chemin). Je fais cela en modifiant la commande xclip -i -selection clipboardpourxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev
23

Ajoutez ceci à votre ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Maintenant, coupez les pâtes p et les copies de clips c - mais vous pouvez aussi faire des choses plus sophistiquées:

clipp | sed 's/^/    /' | cclip

↑ met en retrait votre presse-papiers; bon pour les sites sans { }bouton de débordement de pile

Vous pouvez l'ajouter en exécutant ceci:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
user3276552
la source
Donnez un exemple d'utilisation s'il vous plaît
Ulf Aslak
7

J'utilise Parcellite et xselpour copier le dernier message de validation de gitmon gestionnaire de presse-papiers (pour une raison quelconque, xclipcela ne fonctionne pas):

$ git log -1 --pretty=%B | xsel -i -b
Michal Przybylowicz
la source
7

Sans utiliser d'outils externes, si vous vous connectez à la vue du serveur SSH, il s'agit d'une commande relativement simple:

À partir d'une invite de commande Windows 7+:

ssh user@server cat /etc/passwd | clip

Cela mettra le contenu du fichier distant dans votre presse-papiers local.

(La commande nécessite l'exécution de Pageant pour la clé, ou elle vous demandera un mot de passe.)

d.raev
la source
1
@AfshinMoazami, le titre et la question elle-même sont génériques, seules les balises suggèrent un système Unix, et ma réponse couvre le cas lorsque vous essayez d'obtenir la date d'un serveur Unix vers une machine Windows, ce qui peut être utile pour les futurs lecteurs.
d.raev
1
Voté parce que oui, utile aux administrateurs Windows qui n'ont que Powershell pour jouer localement (bien que maintenant avec LSW réellement fonctionnel, je puisse passer en bash directement depuis Powershell et faire mes * nixy à partir de là).
2017 à 7h59
Son travail sur l'invite DOS ainsi que git bash sur windows 10 ieecho Hello World | clip
5

Pour mac c'est un exemple de façon de copier (dans le presse-papiers) coller (depuis le presse-papiers) en utilisant la ligne de commande

Copiez le résultat de la pwdcommande dans le presse-papiers comme

$ pwd | pbcopy

Utilisez le contenu du presse-papiers comme

$ cd $(pbpaste)
mcvkr
la source
3

J'ai créé un petit outil offrant des fonctionnalités similaires, sans utiliser xclip ou xsel. stdoutest copié dans un presse-papiers et peut être collé à nouveau dans le terminal. Voir:

https://sourceforge.net/projects/commandlinecopypaste/

Notez que cet outil n'a pas besoin d'une session X. Le presse-papiers peut simplement être utilisé dans le terminal et ne doit pas être collé par Ctrl+Vou avec le clic du milieu de la souris dans d'autres fenêtres X.

Dirk Duschinger
la source
3

Sous Linux avec xclip installé:

presse-papiers xclip -selection <fichier

tristobal
la source
2

Sur la base des articles précédents, je me suis retrouvé avec la solution d'alias légère suivante qui peut être ajoutée à .bashrc:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

Exemples:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29
kornieff
la source
1

Je viens d'un milieu dépouillé de KDE et je n'ai pas accès à xclip,xsel ni aux autres trucs fantaisistes. J'ai une TCSH Konsole pour aggraver les choses.

Prérequis: qdbus klipper xargs bash

Créez un exécutable bash foo.sh.

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

Remarque: Cela doit être bash car TCSH ne prend pas en charge les arguments multilignes.

Suivi d'un alias TCSH dans le .cshrc.

alias clipboard xargs -0 /path/to/foo

Explication:

xargs -0tuyaux stdin en un seul argument. Cet argument est passé à l'exécutable bash qui envoie une requête "copier dans le presse-papiers" à klipperusing qdbus. Le canal vers /dev/nullne doit pas imprimer le caractère de retour à la ligne renvoyé par qdbusla console.

Exemple d'utilisation:

ls | clipboard

Cela copie le contenu du dossier actuel dans le presse-papiers.

Remarque: Fonctionne uniquement comme un tuyau. Utilisez directement l' exécutable bash si vous devez copier un argument.

Ryan Dsouza
la source
1

J'exécute généralement cette commande lorsque je dois copier mon ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v n'importe où ailleurs.

Yamen Ashraf
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

Pour ceux qui utilisent bash installé sur leur système Windows (connu sous le nom de Windows Subsystem for Linux (WSL)), la tentative de xclip donnera une erreur:

Error: Can't open display: (null)

Rappelez-vous plutôt que le sous-système Linux a accès aux exécutables Windows. Il est possible d'utiliser clip.exe comme

echo hello | clip.exe

qui vous permet d'utiliser la commande coller (ctrl-v).

DFeng
la source
1
Notez que si un xserver (tel que vcxsvr ou xming) est installé sur Windows, un affichage est activé et xclipboard est en cours d'exécution, vous pouvez réellement utiliser xclip de manière apparente.
bitbyte
0

Juste pour couvrir un cas de bord :) et parce que le titre de la question demande (au moins maintenant) comment copier la sortie d'une commande directement dans le presse-papiers.

Souvent, je trouve utile de copier la sortie de la commande après qu'elle a déjà été exécutée et je ne veux pas ou ne peux pas exécuter à nouveau la commande.

Pour ce scénario, nous pouvons utiliser gdm ou un utilitaire de souris similaire et sélectionner à l'aide de la souris. apt-get install gdmpuis soit le clic droit ou les combinaisons Cntrl + Maj + c et Cntrl + Maj + v pour copier et coller dans le terminal

Ou, qui est la méthode préférée pour moi (comme la souris ne peut pas sélectionner correctement dans un volet lorsque vous avez plusieurs volets côte à côte et que vous devez sélectionner plusieurs lignes), en utilisant tmux, nous pouvons copier dans le tampon tmux en utilisant la norme [, espace, déplacez pour sélectionner, entrez ou vous pouvez sélectionner un bloc de code. Cela est également particulièrement utile lorsque vous êtes dans l'une des voies du multiplexeur cli comme tmux ET que vous devez sélectionner un tas de texte, mais pas les numéros de ligne (ma configuration vim rend les numéros de ligne)

Après cela, vous pouvez utiliser la commande:

tmux save-buffer - | xclip -i

Vous pouvez bien sûr l'aliaser à quelque chose que vous aimez ou lier directement dans le fichier de configuration tmux

C'est juste pour vous donner une réponse conceptuelle pour couvrir ce cas de bord lorsqu'il n'est pas possible d'exécuter à nouveau la commande. Si vous avez besoin d'exemples de code plus spécifiques, faites-le moi savoir

À votre santé

George Mogilevsky
la source