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.


Experimentar

xclip

xclip - command line interface to X selections (clipboard) 

man



No macOS, use os comandos pbpaste e pbpaste .

Por exemplo, se você executar

cat ~/.bashrc | pbcopy

o conteúdo do arquivo ~/.bashrc estará disponível para colar com o atalho Cmd + v .


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.





clipboard