Como canalizar a saída de um comando na minha área de transferência e colá-la novamente ao usar um terminal? Por exemplo:
cat file | clipboard
apt install xclip
ecat file | xclip -sel clip
Como canalizar a saída de um comando na minha área de transferência e colá-la novamente ao usar um terminal? Por exemplo:
cat file | clipboard
apt install xclip
ecat file | xclip -sel clip
Respostas:
Eu sempre quis fazer isso e encontrei uma maneira agradável e fácil de fazê-lo. Anotei o procedimento completo para o caso de mais alguém precisar.
Primeiro instale um programa de 16 kB chamado xclip
:
sudo apt-get install xclip
Você pode canalizar a saída xclip
para ser copiada na área de transferência:
cat file | xclip
Para colar o texto que você acabou de copiar, use:
xclip -o
Para simplificar a vida, você pode configurar um alias no seu arquivo .bashrc como eu fiz:
alias "c=xclip"
alias "v=xclip -o"
Para ver como isso é útil, imagine que eu queira abrir meu caminho atual em uma nova janela de terminal (pode haver outras maneiras de fazê-lo como Ctrl+ Tem alguns sistemas, mas isso é apenas para fins ilustrativos):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Observe o ` `
redor v
. Isso é executado v
primeiro como um comando e depois o substitui no local para cd
uso.
Copie apenas o conteúdo para a X
área de transferência
cat file | xclip
Se você deseja colar em outro lugar que não seja um X
aplicativo, tente este:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
e alias "vs=xclip -o -selection clipboard"
fazer copiar / colar da área de transferência do sistema mais fácil
No OS X, use pbcopy
; pbpaste
vai na direção oposta.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Eu criei uma ferramenta para Linux / OSX / Cygwin que é semelhante a alguns desses outros, mas um pouco exclusiva. Eu chamo cb
e pode ser encontrado nesta essência do github .
Nessa essência, eu demonstro como copiar e colar via linha de 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: originalmente eu pretendia mencionar isso no meu comentário para resposta de Bob Enohp . Mas então percebi que deveria adicionar um README à minha essência. Como o editor de essência não oferece uma visualização do Markdown, usei a caixa de respostas aqui e depois de copiar / colar no meu pensamento de essência, "Eu também poderia enviar a resposta".
Esse script é modelado depois tee
(consulteman tee
).
É como seus comandos normais de copiar e colar, mas unificados e capazes de detectar quando você deseja que ele seja encadeado
$ 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, fazia sentido demonstrar isso no final)
# 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
Eu escrevi esse pequeno script que tira o palpite dos comandos de copiar / colar.
A versão Linux do script depende do xclip já estar instalado no seu sistema. O script é chamado de área de transferência.
#!/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
A versão do script para OS X conta com o pbcopy e o pbpaste pré-instalados em todos os Macs.
#!/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
O uso do script é muito simples, uma vez que você simplesmente entra ou sai clipboard
como mostra esses dois exemplos.
$ cat file | clipboard
$ clipboard | less
pbcopy
e pbpaste
no Linux para que ele funciona tanto para Linux e OS X.
~/.scripts/clipboard
* Torne-o executável chmod +x ~/.scripts/clipboard
para o bash: * adicione export PATH=$PATH:~/.scripts
no final do ~/.bashrc
for fish: * adicione set PATH ~/.scripts $PATH
ao ~/.config/fish/fish.config
Se algum arquivo ou pasta ainda não existir, apenas crie-o.
clipboard(){ ... }
e colá-lo .bashrc
date | cb | tee -a updates.log
. Isso enviaria a date
saída do comando para a área de transferência e passaria para o tee -a
comando que o anexa a um arquivo e o repassa para stdout
. Mas é como um " tee à prova de vazamentos para a área de transferência", porque se você simplesmente não date | cb
obtém saída. E, finalmente, também funciona cb > file.txt
gist.github.com/RichardBronosky/…
xclip -i -selection clipboard
paraxargs echo -n | xclip -i -selection clipboard
Adicione isso ao seu ~/.bashrc
:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Agora, recorte p pastas ec c cópias - mas você também pode fazer coisas mais sofisticadas:
clipp | sed 's/^/ /' | cclip
↑ recua sua área de transferência; bom para sites sem o { }botão de estouro de pilha
Você pode adicioná-lo executando o seguinte:
printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
Estou usando o Parcellite e xsel
para copiar a última mensagem de confirmação do git
meu gerente da área de transferência (por algum motivo xclip
não funciona):
$ git log -1 --pretty=%B | xsel -i -b
Sem usar ferramentas externas, se você estiver se conectando ao SSH da visualização do servidor, este é um comando relativamente fácil:
Em um prompt de comando do Windows 7+:
ssh user@server cat /etc/passwd | clip
Isso colocará o conteúdo do arquivo remoto na área de transferência local.
(O comando requer a execução do Pageant para a chave, ou será solicitada uma senha.)
Fiz uma pequena ferramenta fornecendo funcionalidade semelhante, sem usar o xclip ou o xsel. stdout
é copiado para uma área de transferência e pode ser colado novamente no terminal. Vejo:
https://sourceforge.net/projects/commandlinecopypaste/
Observe que essa ferramenta não precisa de uma sessão X. A área de transferência pode ser usada apenas dentro do terminal e não deve ser colada Ctrl+Vou clique com o botão do meio do mouse em outras janelas X.
Com base nas postagens anteriores, acabei com a seguinte solução de alias de peso leve que pode ser adicionada 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
Exemplos:
# 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
Eu venho de um histórico despojado do KDE e não tenho acesso xclip
,xsel
ou outro material extravagante. Eu tenho um TCSH Konsole para piorar a situação.
Requisitos: qdbus
klipper
xargs
bash
Crie um executável bash foo.sh
.
#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null
Nota: necessário bash, pois o TCSH não suporta argumentos de várias linhas.
Seguido por um alias do TCSH no .cshrc
.
alias clipboard xargs -0 /path/to/foo
Explicação:
xargs -0
tubos stdin em um único argumento. Esse argumento é passado para o executável do bash, que envia uma solicitação de "copiar para a área de transferência" para klipper
uso qdbus
. O canal para /dev/null
não imprimir o caractere de nova linha retornado pelo qdbus
console.
Exemplo de uso:
ls | clipboard
Isso copia o conteúdo da pasta atual para a área de transferência.
Nota: Funciona apenas como um tubo. Use o executável bash diretamente se precisar copiar um argumento.
Eu costumo executar este comando quando tenho que copiar o meu ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
em qualquer outro lugar.
no Wayland, o xcopy parece não funcionar, use wl-clipboard . por exemplo, no fedora
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
Para aqueles que usam o bash instalado no sistema Windows (conhecido como Windows Subsystem para Linux (WSL)), tentar o xclip apresentará um erro:
Error: Can't open display: (null)
Em vez disso, lembre-se de que o subsistema linux tem acesso aos executáveis do Windows. É possível usar o clip.exe como
echo hello | clip.exe
que permite usar o comando colar (ctrl-v).
Apenas para cobrir um caso extremo :) e porque o título da pergunta pergunta (pelo menos agora) como copiar a saída de um comando diretamente para a área de transferência.
Muitas vezes, acho útil copiar a saída do comando depois que ele já foi executado e não quero ou não posso executar o comando novamente.
Nesse cenário, podemos usar o gdm ou um utilitário semelhante do mouse e selecionar usando o mouse. apt-get install gdm
e, em seguida, clique com o botão direito do mouse ou nas combinações Cntrl + Shift + ce Cntrl + Shift + v para copiar e colar no terminal
Ou, qual é o método preferido para mim (como o mouse não pode selecionar corretamente dentro de um painel quando você tem vários painéis lado a lado e precisa selecionar mais de uma linha), usando o tmux, podemos copiar no buffer do tmux usando o padrão [, espaço, mova para selecionar, digite ou você pode selecionar um bloco de código. Além disso, isso é particularmente útil quando você está dentro de uma das faixas do multiplexador cli como o tmux E precisa selecionar um monte de texto, mas não os números das linhas (minha configuração do vim renderiza os números das linhas)
Depois disso, você pode usar o comando:
tmux save-buffer - | xclip -i
É claro que você pode fazer o alias de algo que você gosta ou ligar diretamente no arquivo de configuração do tmux
Isso serve apenas para fornecer uma resposta conceitual para cobrir esse caso extremo, quando não é possível executar o comando novamente. Se você precisar de exemplos de código mais específicos, informe-me
Felicidades