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 | clipboardapt install xclipetcat 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 | clipboardapt install xclipetcat 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 xclipVous pouvez ensuite diriger la sortie vers xclipà copier dans le presse-papiers:
cat file | xclipPour coller le texte que vous venez de copier, vous devez utiliser:
xclip -oPour 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 | xclipSi vous souhaitez coller ailleurs qu'une Xapplication, essayez celle-ci:
cat file | xclip -selection clipboardalias "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; pbpasteva dans la direction opposée.
pbcopy < .ssh/id_rsa.pubpbcopy < .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 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.
_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 00J'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"
fiLa 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
fiL'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 | lesspbcopyet pbpastesous 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 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/…
                    xclip -i -selection clipboardpourxargs 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" >> ~/.bashrcJ'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 -bSans 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 | clipCela 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. 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.
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'
fiExemples:
# 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      29Je 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/nullRemarque: 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/fooExplication:
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 | clipboardCela 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 | pbcopyctrl+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 > filePour 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.exequi 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 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é