web-dev-qa-db-fra.com

Comment copier le résultat d'une commande directement dans mon presse-papiers?

Comment puis-je diriger 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
388
Legend

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

Commencez par installer un programme de 16 Ko appelé xclip:

Sudo apt-get install xclip

Vous pouvez ensuite diriger la sortie dans xclip pour la 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 souhaite ouvrir mon chemin actuel dans une nouvelle fenêtre de terminal (il existe peut-être d'autres moyens de le faire, par exemple: Ctrl+T sur certains systèmes, mais ceci n’est qu’à titre d’illustration):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Notez le ` ` autour de v. Ceci exécute d'abord v en tant que commande, puis la remplace sur place par cd à utiliser.

Copiez uniquement le contenu dans le presse-papiers X

cat file | xclip

Si vous souhaitez coller ailleurs que dans une application X, essayez celle-ci:

cat file | xclip -selection clipboard
504
Legend

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

138
DavidPhillipOster

J'ai écrit ce petit script qui simplifie les commandes copier/coller.

La version Linux du script repose sur le fait que xclip est déjà installé sur votre système. Le script s'appelle 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 d'entrer ou de sortir de clipboard, comme indiqué dans ces deux exemples.

$ cat file | clipboard

$ clipboard | less
40
Bob Enohp

J'ai créé un outil pour Linux/OSX/Cygwin, similaire à certains de ces autres logiciels, mais légèrement unique. Je l’appelle cb et on peut la trouver dans ce github Gist .

Dans ce résumé, je montre comment faire du copier-coller via une ligne de commande sous 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: Au départ, je voulais simplement mentionner cela dans mon commentaire à réponse de Bob Enohp . Mais ensuite, j'ai réalisé que je devrais ajouter un README à mon Gist. Puisque l'éditeur Gist n'offre pas d'aperçu de Markdown, j'ai utilisé la zone de réponse ici et, après l'avoir copié/collé dans ma pensée de Gist, "je pourrais aussi bien envoyer la réponse."

cb

Un té étanche au presse-papiers

Ce script est modélisé d'après tee (voir man tee ).

C'est comme vos commandes normales de copier/coller, mais unifié et capable de détecter quand vous voulez qu'il soit chaînable

Exemples

Copie

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

Coller

# 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

Chaînage

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

(chronologiquement, il était logique de faire la 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
38
Bruno Bronosky

Ajoutez ceci à votre ~/.bashrc:

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

Maintenant, clip p colle et c copies de clips - 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 débordement de pile { } bouton

Vous pouvez l'ajouter en lançant ceci:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
20
user3276552

J'utilise Parcellite et xsel pour copier le dernier message de validation de git dans mon gestionnaire de Presse-papiers (pour une raison quelconque, xclip ne fonctionne pas):

$ git log -1 --pretty=%B | xsel -i -b
7

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

A 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é, sinon elle vous demandera un mot de passe.)

5
d.raev

Sous Linux avec xclip installé:

xclip -selection clipboard <fichier

3
tristobal

J'ai créé un petit outil offrant des fonctionnalités similaires, sans utiliser xclip ni xsel. stdout est copié dans un presse-papier 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+V ou un clic du milieu dans d'autres fenêtres X.

3
Dirk Duschinger

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

Error: Can't open display: (null)

Rappelez-vous 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

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

0
DFeng

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

Requisites: qdbusklipperxargsbash

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

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

Note: Ceci doit être bash car TCSH ne supporte pas les arguments multilignes.

Suivi d'un alias TCSH dans le.cshrc.

alias clipboard xargs -0 /path/to/foo

Explication:

xargs -0 convertit stdin en un seul argument. Cet argument est transmis à l'exécutable bash qui envoie une demande "copy to clipboard" à klipper à l'aide de qdbus. Le tube vers /dev/null ne doit pas imprimer le caractère de nouvelle ligne renvoyé par qdbus sur la console.

Exemple d'utilisation:

ls | clipboard

Ceci copie le contenu du dossier actuel dans le presse-papier. 

Remarque: Ne fonctionne que comme un tuyau. Utilisez l'exécutable bash directement si vous devez copier un argument.

0
Ryan Dsouza

Sur la base de publications précédentes, je me suis retrouvé avec la solution d'alias de poids léger suivante pouvant ê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
0
kornieff

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

Souvent, je trouve utile de copier le résultat de la commande alors qu’elle a déjà été exécutée et je ne veux pas ou ne peux pas exécuter la commande à nouveau.

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 gdm puis le clic droit ou les combinaisons Cntrl + Shift + c et Cntrl + Shift + v pour copier et coller dans le terminal

Ou bien, quelle est ma méthode préférée (la souris ne pouvant pas sélectionner correctement un volet lorsque vous avez plusieurs volets côte à côte et que vous devez sélectionner plusieurs lignes), vous pouvez copier dans la mémoire tampon tmux à l'aide de tmux. [ espace, déplacez pour sélectionner, entrez ou vous pouvez sélectionner un bloc de code. Cela est également particulièrement utile lorsque vous vous trouvez 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 de 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 aliaser quelque chose que vous aimez ou lier directement dans le fichier de configuration de tmux

Ceci est juste pour vous donner une réponse conceptuelle pour couvrir ce cas Edge quand il est impossible d'exécuter la commande à nouveau. Si vous avez besoin d'exemples de code plus spécifiques, faites-le moi savoir.

À votre santé

0
George Mogilevsky