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
apt install xclip
etcat file | xclip -sel clip
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
apt install xclip
etcat file | xclip -sel clip
Réponses:
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 v
comme une commande, puis la remplace sur place pour cd
être utilisée.
Copiez uniquement le contenu dans le X
presse - papiers
cat file | xclip
Si vous souhaitez coller ailleurs qu'une X
application, essayez celle-ci:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
et alias "vs=xclip -o -selection clipboard"
faciliter le copier / coller à partir du presse-papiers du système
Sous OS X, utilisez pbcopy
; pbpaste
va dans la direction opposée.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
J'ai créé un outil pour Linux / OSX / Cygwin qui est similaire à certains de ces autres mais légèrement unique. Je l'appelle cb
et 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.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_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."
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
$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
# 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
$ 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
(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
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 clipboard
comme indiqué dans ces deux exemples.
$ cat file | clipboard
$ clipboard | less
pbcopy
et pbpaste
sous Linux, donc cela fonctionne à la fois pour Linux et OS X.
~/.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.
clipboard(){ ... }
et le coller dans .bashrc
date | cb | tee -a updates.log
. Cela enverrait la date
sortie de la commande au presse-papiers et la transmettrait à la tee -a
commande 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 | cb
vous n'obtenez aucune sortie. Et enfin, il fait aussi cb > file.txt
gist.github.com/RichardBronosky/…
xclip -i -selection clipboard
pourxargs echo -n | xclip -i -selection clipboard
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
J'utilise Parcellite et xsel
pour copier le dernier message de validation de git
mon gestionnaire de presse-papiers (pour une raison quelconque, xclip
cela ne fonctionne pas):
$ git log -1 --pretty=%B | xsel -i -b
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.)
J'ai créé un petit outil offrant des fonctionnalités similaires, sans utiliser xclip ou xsel. stdout
est 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.
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
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 -0
tuyaux stdin en un seul argument. Cet argument est passé à l'exécutable bash qui envoie une requête "copier dans le presse-papiers" à klipper
using qdbus
. Le canal vers /dev/null
ne doit pas imprimer le caractère de retour à la ligne renvoyé par qdbus
la 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.
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.
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
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).
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 gdm
puis 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é