Come posso copiare l'output di un comando direttamente negli appunti?


529

Come posso reindirizzare l'output di un comando nei miei appunti e incollarlo indietro quando utilizzo un terminale? Per esempio:

cat file | clipboard


possibile duplicato di superuser.com/questions/104981/…
Champ

Ho appena fatto una domanda correlata poiché non riesco a far funzionare xclip quando accedo a Ubuntu da Git Bash su Windows: stackoverflow.com/q/60117294/470749
Ryan

1
Salva il contenuto del file negli appunti. apt install xclipecat file | xclip -sel clip
EsmaeelE,

Risposte:


598

Ho sempre voluto farlo e ho trovato un modo semplice e piacevole per farlo. Ho scritto la procedura completa nel caso in cui qualcun altro ne abbia bisogno.

Prima installa un programma da 16 kB chiamato xclip:

sudo apt-get install xclip

È quindi possibile reindirizzare l'output xclipper essere copiato negli Appunti:

cat file | xclip

Per incollare il testo appena copiato, dovrai usare:

xclip -o

Per semplificare la vita, puoi impostare un alias nel tuo file .bashrc come ho fatto:

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

Per vedere quanto sia utile, immagina di voler aprire il mio percorso corrente in una nuova finestra del terminale (potrebbero esserci altri modi per farlo come Ctrl+ Tsu alcuni sistemi, ma questo è solo a scopo illustrativo):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Notare il ` ` giro v. Questo viene eseguito prima vcome comando e poi lo sostituisce sul posto per cdusarlo.

Copia il contenuto solo negli Xappunti

cat file | xclip

Se vuoi incollare altrove oltre a Xun'applicazione, prova questo:

cat file | xclip -selection clipboard

146
"file cat | xclip" copia solo il contenuto negli Appunti 'X', se vuoi incollare altrove oltre a un'applicazione 'X', prova questo: "file cat | xclip -selection appunti"
khotyn

5
La scelta della maniglia è appropriata!
Matt Joiner,

4
Se si desidera rimuovere il carattere di nuova riga in modo da poter incollare e modificare direttamente il risultato di "pwd | c", è possibile eseguire "pwd | tr -d '\ n' | xclip -selection c"
Anake,

12
anche definire alias "cs=xclip -selection clipboard"e alias "vs=xclip -o -selection clipboard"rendere più semplice la copia / incolla dagli appunti di sistema
Yibo Yang

1
Che dire di una soluzione in cui non ho accesso sudo e xclip non è installato ??
DanGordon,

179

Su OS X, utilizzare pbcopy; pbpasteva nella direzione opposta.

pbcopy < .ssh/id_rsa.pub

14
Yups! Proprio così per esempio:pbcopy < .ssh/id_rsa.pub
doublejosh,

non funziona per l'uscita di comando tho - ad esempiopbcopy < git merge-base master some-branch
Ben

se stai usando tmux, non funzionerà se non ricolleghi la sessione: superuser.com/a/413233/146254
Atav32

1
puoi anche usare cat, se ci lavori già: cat file.txt | pbcopy
rtrigoso,

3
So che il commento ha 5 anni, ma nel caso in cui qualcuno si imbatterà in questo in futuro, da usare con l'output del comando, fallogit merge-base master some-branch | pbcopy
Sam

62

Ho creato uno strumento per Linux / OSX / Cygwin che è simile ad alcuni di questi altri ma leggermente unico. Lo chiamo cbe può essere trovato in questo github gist .

In questo senso ho dimostrato come fare copia e incolla tramite riga di comando usando Linux, macOS e Cygwin.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

Mac OS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Nota: inizialmente intendevo menzionarlo nel mio commento alla risposta di Bob Enohp . Ma poi ho capito che avrei dovuto aggiungere un file README al mio contenuto. Poiché l'editor gist non offre un'anteprima di Markdown, ho usato la casella di risposta qui e dopo averla copiata / incollata al mio pensiero gist, "Potrei anche inviare la risposta".

CB

Una maglietta a prova di perdite negli Appunti

Questo script è modellato dopo tee(vedi man tee).

È come i tuoi normali comandi copia e incolla, ma unificati e in grado di rilevare quando vuoi che siano incatenabili

Esempi

copia

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

Incolla

# 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

chaining

$ 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

Copia tramite reindirizzamento file

(cronologicamente aveva senso dimostrarlo alla fine)

# 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

Questo ha funzionato perfettamente per me per copiare un output di comando negli Appunti nel terminale su macOS, grazie!
Joshua Dyck,

46

Ho scritto questo piccolo script che toglie la congettura dai comandi copia / incolla.

La versione Linux dello script si basa sul fatto che xclip sia già installato nel tuo sistema. Lo script si chiama appunti.

#!/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 versione OS X dello script si basa su pbcopy e pbpaste che sono preinstallati su tutti i 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'uso dello script è molto semplice poiché si esegue semplicemente il pipe in o out clipboardcome mostrato in questi due esempi.

$ cat file | clipboard

$ clipboard | less

3
Uso i nomi pbcopye pbpastesu Linux, quindi funziona sia per Linux che per OS X.
StackedCrooked

Per far funzionare lo script a livello globale in Ubuntu: * Salvalo su ~/.scripts/clipboard * Rendi eseguibile chmod +x ~/.scripts/clipboard per bash: * aggiungi export PATH=$PATH:~/.scriptsalla fine di ~/.bashrc per fish: * aggiungi set PATH ~/.scripts $PATHa ~/.config/fish/fish.config Se uno dei file o delle cartelle non esiste già crearli.
Hockey,

2
Puoi anche avvolgere questo script come funzione clipboard(){ ... }e incollarlo in .bashrc
Sebastian Nowak,

Questo è molto simile a quello che ho realizzato, ma consento il concatenamento date | cb | tee -a updates.log. Ciò invierebbe l' dateoutput del comando negli Appunti e lo passerebbe al tee -acomando che lo accoda a un file e lo passa a stdout. Ma è come un " tee a prova di perdite negli Appunti" perché se lo fai date | cbnon ottieni alcun risultato. E finalmente lo fa anche cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky

Un suggerimento: rimuovere il carattere di nuova riga finale per evitare di eseguire il comando incolla (ad esempio se si copia e incolla un percorso). Lo faccio modificando il comando xclip -i -selection clipboardinxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

Aggiungi questo al tuo ~/.bashrc:

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

Ora la clip p paste e c copie di clip - ma si può anche fare cose più elaborato:

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

↑ rientra negli appunti; buono per siti senza { }pulsante di overflow dello stack

Puoi aggiungerlo eseguendo questo:

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

Fai un esempio di utilizzo, per favore
Ulf Aslak,

7

Sto usando Parcellite e xselper copiare l'ultimo messaggio di commit dal gitmio gestore degli appunti (per qualche motivo xclipnon funziona):

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

7

Senza utilizzare strumenti esterni, se ci si connette alla vista server SSH, questo è un comando relativamente semplice:

Da un prompt dei comandi di Windows 7+:

ssh user@server cat /etc/passwd | clip

Questo metterà il contenuto del file remoto negli appunti locali.

(Il comando richiede l'esecuzione di Pageant per la chiave o ti chiederà una password.)


1
@AfshinMoazami, il titolo e la domanda stessa sono generici, solo i tag suggeriscono il sistema unix e la mia risposta copre il caso quando si tenta di ottenere la data DA un server unix a un computer Windows, che potrebbe essere utile per i futuri lettori.
d.raev,

1
Eseguito l'upgrade perché sì, utile agli amministratori di Windows che hanno solo Powershell con cui giocare localmente (anche se ora con LSW effettivamente funzionante, posso andare in bash direttamente da Powershell e fare le mie * nixy cose da lì).
Flith,

echo Hello World | clip

5

Per mac questo è un modo esemplificativo per copiare (negli appunti) incollare (dagli appunti) usando la riga di comando

Copia il risultato del pwdcomando negli appunti come

$ pwd | pbcopy

Usa il contenuto negli appunti come

$ cd $(pbpaste)

3

Ho creato un piccolo strumento che offre funzionalità simili, senza usare xclip o xsel. stdoutviene copiato negli appunti e può essere nuovamente incollato nel terminale. Vedere:

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

Nota che questo strumento non ha bisogno di una X-session. Gli Appunti possono essere semplicemente utilizzati all'interno del terminale e non devono essere incollati con Ctrl+Vil tasto centrale del mouse in altre X-windows.


3

In Linux con xclip installato:

xclip -selection appunti <file


2

Sulla base dei post precedenti, ho finito con la seguente soluzione alias leggera che può essere aggiunta a .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

Esempi:

# 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

1

Vengo da uno sfondo KDE ridotto e non ho accesso a xclip,xsel o altre cose di fantasia. Ho un TCSH Konsole per peggiorare le cose.

requisiti: qdbus klipper xargs bash

Crea un eseguibile bash foo.sh.

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

Nota: questo deve essere bash poiché TCSH non supporta argomenti su più righe.

Seguito da un alias TCSH in .cshrc.

alias clipboard xargs -0 /path/to/foo

Spiegazione:

xargs -0pipe stdin in un singolo argomento. Questo argomento viene passato al file eseguibile bash che invia una "copia negli appunti" richiesta di klipperutilizzo qdbus. La pipe per /dev/nullnon stampare il carattere di nuova riga restituito qdbusalla console.

Esempio di utilizzo:

ls | clipboard

Questo copia il contenuto della cartella corrente negli appunti.

Nota: funziona solo come pipe. Utilizzare l'eseguibile bash direttamente se è necessario copiare un argomento.


1

Di solito eseguo questo comando quando devo copiare il mio ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v da qualsiasi altra parte.


1

su Wayland xcopy non sembra funzionare, usa invece wl-appunti . ad es. su fedora

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

0

Per coloro che usano bash installato sul proprio sistema Windows (noto come sottosistema Windows per Linux (WSL)), il tentativo di xclip genererà un errore:

Error: Can't open display: (null)

Invece, ricorda che il sottosistema Linux ha accesso agli eseguibili di Windows. È possibile utilizzare clip.exe come

echo hello | clip.exe

che ti permette di usare il comando incolla (ctrl-v).


1
Nota che se un xserver (come vcxsvr o xming) è installato su Windows, un display è attivo e xclipboard è in esecuzione, puoi effettivamente usare xclip apparentemente.
Bitbyte

0

Solo per coprire un caso limite :) e perché il titolo della domanda chiede (almeno ora) come copiare l'output di un comando direttamente negli appunti.

Spesso trovo utile copiare l'output del comando dopo che è stato già eseguito e non voglio o non posso eseguire nuovamente il comando.

Per questo scenario, possiamo usare gdm o un'utilità del mouse simile e selezionare usando il mouse. apt-get install gdme poi il tasto destro del mouse o le combinazioni Cntrl + Maiusc + c e Cntrl + Maiusc + v per copiare e incollare nel terminale

Oppure, che è il metodo preferito per me (poiché il mouse non può selezionare correttamente all'interno di un riquadro quando si hanno più riquadri affiancati e è necessario selezionare più di una riga), usando tmux possiamo copiare nel buffer tmux usando lo standard [, spazio, spostare per selezionare, inserire o è possibile selezionare un blocco di codice. Anche questo è particolarmente utile quando ti trovi in ​​una delle corsie del multiplexer cli come tmux E devi selezionare un gruppo di testo, ma non i numeri di riga (la mia configurazione di vim rende i numeri di riga)

Dopodiché puoi usare il comando:

tmux save-buffer - | xclip -i

Ovviamente puoi farlo alias con qualcosa che ti piace o associarlo direttamente nel file di configurazione di tmux

Questo è solo per darti una risposta concettuale per coprire questo caso limite quando non è possibile eseguire nuovamente il comando. Se hai bisogno di esempi di codice più specifici, fammelo sapere

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.