Come posso reindirizzare l'output di un comando nei miei appunti e incollarlo indietro quando utilizzo un terminale? Per esempio:
cat file | clipboard
apt install xclip
ecat file | xclip -sel clip
Come posso reindirizzare l'output di un comando nei miei appunti e incollarlo indietro quando utilizzo un terminale? Per esempio:
cat file | clipboard
apt install xclip
ecat file | xclip -sel clip
Risposte:
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 xclip
per 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 v
come comando e poi lo sostituisce sul posto per cd
usarlo.
Copia il contenuto solo negli X
appunti
cat file | xclip
Se vuoi incollare altrove oltre a X
un'applicazione, prova questo:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
e alias "vs=xclip -o -selection clipboard"
rendere più semplice la copia / incolla dagli appunti di sistema
Su OS X, utilizzare pbcopy
; pbpaste
va nella direzione opposta.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Ho creato uno strumento per Linux / OSX / Cygwin che è simile ad alcuni di questi altri ma leggermente unico. Lo chiamo cb
e 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.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_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".
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
$ 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
(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
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 clipboard
come mostrato in questi due esempi.
$ cat file | clipboard
$ clipboard | less
pbcopy
e pbpaste
su Linux, quindi funziona sia per Linux che per OS X.
~/.scripts/clipboard
* Rendi eseguibile chmod +x ~/.scripts/clipboard
per bash: * aggiungi export PATH=$PATH:~/.scripts
alla fine di ~/.bashrc
per fish: * aggiungi set PATH ~/.scripts $PATH
a ~/.config/fish/fish.config
Se uno dei file o delle cartelle non esiste già crearli.
clipboard(){ ... }
e incollarlo in .bashrc
date | cb | tee -a updates.log
. Ciò invierebbe l' date
output del comando negli Appunti e lo passerebbe al tee -a
comando 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 | cb
non ottieni alcun risultato. E finalmente lo fa anche cb > file.txt
gist.github.com/RichardBronosky/…
xclip -i -selection clipboard
inxargs echo -n | xclip -i -selection clipboard
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
Sto usando Parcellite e xsel
per copiare l'ultimo messaggio di commit dal git
mio gestore degli appunti (per qualche motivo xclip
non funziona):
$ git log -1 --pretty=%B | xsel -i -b
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.)
Ho creato un piccolo strumento che offre funzionalità simili, senza usare xclip o xsel. stdout
viene 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.
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
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 -0
pipe stdin in un singolo argomento. Questo argomento viene passato al file eseguibile bash che invia una "copia negli appunti" richiesta di klipper
utilizzo qdbus
. La pipe per /dev/null
non stampare il carattere di nuova riga restituito qdbus
alla 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.
Di solito eseguo questo comando quando devo copiare il mio ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
da qualsiasi altra parte.
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
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).
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 gdm
e 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