linux - yes - send input bash
Pipe de/para a área de transferência no script Bash (16)
2018 resposta
Use o clipboard-cli . Funciona com macOS, Windows, Linux, OpenBSD, FreeBSD e Android sem problemas reais.
Instale-o com:
npm install -g clipboard-cli
Então você pode fazer
echo foo | clipboard
Se você quiser, você pode alias para cb
colocando o seguinte em seu .bashrc
, .bash_profile
ou .zshrc
:
alias cb=clipboard
https://code.i-harness.com
É possível canalizar de / para a área de transferência no Bash?
Quer se trate de piping de / para um identificador de dispositivo ou usando um aplicativo auxiliar, não consigo encontrar nada.
Por exemplo, se /dev/clip
fosse um dispositivo com link para a área de transferência, poderíamos fazer:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
Instalar
# You can install xclip using `apt-get`
apt-get install xclip
# or `pacman`
pacman -S xclip
# or `dnf`
dnf install xclip
Se você não tiver acesso ao apt-get
nem ao pacman
, nem ao dnf
, as fontes estarão disponíveis no sourceforge .
Configuração
Bater
Em ~/.bash_aliases
, adicione:
alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"
Não esqueça de carregar sua nova configuração usando . ~/.bash_aliases
. ~/.bash_aliases
ou reiniciando seu perfil.
Peixe
Em ~/.config/fish/config.fish
, adicione:
abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"
Não se esqueça de reiniciar a instância do seu peixe, reiniciando o terminal para que as alterações sejam aplicadas.
Uso
Agora você pode usar setclip
e getclip
, por exemplo:
$ echo foo | setclip
$ getclip
foo
Alguns programas do Windows que escrevi anos atrás. Eles permitem que você despeje, empurre, acrescente e imprima a área de transferência. Funciona assim:
dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip
Inclui o código-fonte: cmd_clip.zip
Apenas para Mac:
echo "Hello World" | pbcopy
pbpaste
Eles estão localizados em /usr/bin/pbcopy
e /usr/bin/pbpaste
.
Certifique-se de estar usando alias xclip="xclip -selection c"
senão você não pode simplesmente usar Ctrl + v para colar em um lugar diferente.
echo test | xclip
Ctrl + v === test
Copie e cole na área de transferência no Windows (Cygwin):
Vejo:
$ clip.exe -?
CLIP Descrição: Redireciona a saída de ferramentas de linha de comando para a área de transferência do Windows. Esta saída de texto pode então ser colada em outros programas. Lista de Parâmetros: Exibe esta mensagem de ajuda. Exemplos: DIR | CLIP Coloca uma cópia da listagem do diretório atual na área de transferência do Windows. CLIP <README.TXT Coloca uma cópia do texto de readme.txt na área de transferência do Windows.
Também existe o getclip (pode ser usado em vez de shift + ins!), O putclip (echo oaeuoa | putclip.exe para colocá-lo no clipe)
Este é um script Python simples que faz exatamente o que você precisa:
#!/usr/bin/python
import sys
# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'
if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
with open(clipboard_file, 'r') as c:
sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
with open(clipboard_file, 'w') as c:
c.write(sys.stdin.read())
Salve isso como um executável em algum lugar em seu caminho (salvei em /usr/local/bin/clip
. Você pode canalizar coisas para serem salvas em sua área de transferência ...
echo "Hello World" | clip
E você pode canalizar o que está na sua área de transferência para algum outro programa ...
clip | cowsay
_____________
< Hello World >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Executá-lo por si só irá simplesmente mostrar o que está na área de transferência.
Existem algumas maneiras. Algumas das maneiras que foram mencionadas incluem (eu acho) tmux, screen, vim, emacs e shell. Eu não sei emacs ou tela, então eu vou sobre os outros três.
Tuxux
Embora não seja uma seleção X, o tmux tem um modo de cópia acessível via prefix-[
(o prefix
é Ctrl + B por padrão). O buffer usado para este modo é separado e exclusivo do tmux, o que abre algumas possibilidades e o torna mais versátil que as seleções X nas situações certas.
Para sair deste modo, pressione q ; para navegar, use sua ligação vim
ou emacs
(default = vim), então hjkl
para movimento, v/V/Cv
para seleção de caractere / linha / bloco, etc. Quando tiver sua seleção, pressione Enter para copiar e sair do modo.
Para colar deste buffer, use o prefix-]
.
Concha
Qualquer instalação do X11
parece vir com dois programas por padrão: xclip
e xsel
(tipo como ele também vem com startx
e xinit
). A maioria das outras respostas menciona o xclip
, e eu realmente gosto do xsel
por sua brevidade, então eu vou cobrir o xsel
.
De xsel(1x) :
Opções de entrada
-a, --append
acrescente a entrada padrão à seleção. Implica -i .
-f, --seguir
acrescentar à seleção como entrada padrão cresce. Implica -i .
-i, --input
ler entrada padrão na seleção.
Opções de saída
-o, - saída
escreva a seleção na saída padrão.
Opções de ação
-c, --claro
limpe a seleção. Substitui todas as opções de entrada.
-d, --delete
Solicite que a seleção atual seja excluída. Isso não apenas limpa a seleção, mas também solicita ao programa em que a seleção reside que o conteúdo selecionado seja excluído. Substitui todas as opções de entrada.
Opções de seleção
-p, --primary
operar na seleção PRINCIPAL (padrão).
-s, --secundário
operar na seleção SECONDARY.
-b, --clipboard
operar na seleção CLIPBOARD.
E isso é tudo que você precisa saber. p
(ou nada) para PRIMARY
, s
para SECONDARY
, b
para CLIPBOARD
, o
para saída.
Exemplo: digamos que eu queira copiar a saída de foo
de um TTY e colá-lo em uma página da Web para um relatório de bug. Para fazer isso, seria ideal copiar para / da sessão TTY / X. Então a questão é como eu acesso a área de transferência do TTY?
Para este exemplo, vamos supor que a sessão X está em exibição :1
.
$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
Então eu posso Ctrl-V
na forma como de costume.
Agora diga que alguém no site de suporte me dá um comando para corrigir o problema. É complicado e longo.
$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
A encomenda de pizza parece um uso produtivo da linha de comando.
...se movendo.
Vim
Se compilado com +clipboard
(Isto é importante! Verifique sua vim --version
), o Vim deve ter acesso às seleções X PRIMARY
e CLIPBOARD
. As duas seleções são acessíveis a partir dos registros *
e +
, respectivamente, e podem ser gravadas e lidas de acordo com o seu tempo de lazer, da mesma forma que qualquer outro registro. Por exemplo:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example
Se a sua cópia do vim não suportar diretamente o acesso a seleções X, não será o fim do mundo. Você pode simplesmente usar a técnica xsel
conforme descrito na última seção.
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
Vincule alguns combos chaves e você deve ser bom.
Há também xclip-copyfile .
No subsistema Windows para Linux, você pode copiar para a área de transferência com clip.exe.
cat file | clip.exe
Lembre-se de usar o |
comando pipe. E não um comando, já que isso não funcionará.
Uau, eu não posso acreditar quantas respostas existem para esta questão. Eu não posso dizer que eu tentei todos eles, mas eu tentei o top 3 ou 4 e nenhum deles funciona para mim. O que funcionou para mim foi uma resposta localizada em um dos comentários escritos por um usuário chamado doug. Desde que eu achei tão útil, decidi reafirmar em uma resposta.
Instale o utilitário xcopy e, quando estiver no Terminal, insira:
cópia de
Thing_you_want_to_copy|xclip -selection c
Colar
myvariable=$(xclip -selection clipboard -o)
Eu notei um monte de respostas recomendado pasta e pbcopy. Se você está nesses utilitários, mas por alguma razão eles não estão disponíveis no seu repositório, você sempre pode criar um alias para os comandos do xcopy e chamá-los de pasta e pasta.
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Então, ficaria assim:
Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
Você é um pouco ambígua. Eu espero que você seja um usuário do Linux dentro do X que queira colocar coisas na área de transferência do X PRIMARY
.
É importante entender que o bash
não tem uma prancheta. Não existe tal coisa como "a" área de transferência, porque o bash
pode rodar no Windows, Mac OS X, muitos outros sistemas operacionais, dentro do X, fora do X, ... Sem mencionar que o próprio X possui três pranchetas diferentes. Há uma abundância de pranchetas que você pode estar lidando. Normalmente, a área de transferência com a qual você deseja conversar tem um utilitário que permite conversar com ela.
No caso de X, sim, há xclip
(e outros). xclip -selection c
irá enviar dados para a área de transferência que funciona com Ctrl-C, Ctrl-V na maioria dos aplicativos.
Se você está tentando falar com a área de transferência do Mac OS X, há o pbcopy
.
Se você está no modo terminal do Linux (sem X), então talvez você precise olhar para o gpm
.
Há também a screen
GNU que tem uma área de transferência. Para colocar coisas lá, olhe para o comando screen
" readreg
".
No Windows / cygwin, use /dev/clipboard
ou clip
para versões mais recentes do Windows (pelo menos o Windows 10).
xsel no Debian / Ubuntu / Mint
# append to clipboard:
cat 'the file with content' | xsel -ib
# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib
# show clipboard
xsel -b
# Get more info:
man xsel
Instalar
sudo apt-get install xsel
xsel -b
Faz o trabalho de x11, na maioria das vezes já está instalado. Uma olhada na página de man do xsel vale o esforço.