É possível canalizar de / para a área de transferência no Bash?
Seja na tubulação de / para um identificador de dispositivo ou usando um aplicativo auxiliar, não consigo encontrar nada.
Por exemplo, se /dev/clip
fosse um dispositivo vinculado à á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
:%y+
no vim, que é o vim-speak para "puxar (copiar) todas as linhas do registro '+' (aPRIMARY
área de transferência do X )". Você pode substituir%
por um intervalo, se desejar ser específico. Mas há três ressalvas: 1. Agora, você precisa salvar qualquer texto em um arquivo antes de poder copiá-lo. Isso contrasta com oxclip
comando mencionado nas respostas. 2. Se você ainda não sabe como se divertir, isso pode ser entediante. 3. Você só pode fazer isso se um determinado recurso estiver ativado ao compilar o vim. Se você instalar o GVim, ele deverá ser ativado por padrão nas instâncias da GUI e do terminal do vim.xclip
. Sua resposta funcionou como um encanto.:%y+
primeiro, mas ok, você tem todas as bases cobertas! Um bom.Respostas:
Você pode lidar com diversas pranchetas. Espero que você provavelmente seja um usuário do Linux que queira colocar coisas na área de transferência principal do X Windows. Geralmente, a área de transferência com a qual você deseja conversar possui um utilitário que permite conversar com ela.
No caso de X, há
xclip
(e outros).xclip -selection c
enviará dados para a área de transferência que funciona com Ctrl + C, Ctrl + Vna maioria dos aplicativos.Se você estiver no Mac OS X, existe
pbcopy
.Se você estiver em Linux modo de terminal (sem X), em seguida, olhar para
gpm
ou tela que tem uma área de transferência. Tente oscreen
comandoreadreg
.No Windows 10+ ou cygwin, use
/dev/clipboard
ouclip
.fonte
/dev/clipboard
também trabalha para os reservatórios festança Msys / MinGWxclip -selection c
irá enviar os dados para a área de transferência que funciona com ^ C, ^ V na maioria das aplicaçõesclip
assim:dir | clip
/dev/clipboard
, e obriga a instalar o xclip ou o gpm, que está ausente por padrão pelo menos no Kubuntu (acho que na maioria das outras distribuições) .Certifique-se de que você esteja usando,
alias xclip="xclip -selection c"
caso contrário, não poderá usar o Ctrl+ vpara colar novamente em um local diferente.Ctrl+v
=== test
fonte
xclip -selection clipboard -o
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Espero que ajude.xclip
não está adicionando uma nova linha,echo
está. Tenteprintf test | xclip -i -selection clipboard
. (printf
Doesnt adicionar uma nova linha a menos que você escrever'test\n'
.)echo -n
vez deprintf
.Instalar
Se você não tem acesso
apt-get
nempacman
, nemdnf
, as fontes estão disponíveis no sourceforge .Configuração
Bater
Em
~/.bash_aliases
, adicione:Não se esqueça de carregar sua nova configuração usando
. ~/.bash_aliases
ou reiniciando seu perfil.Peixe
Em
~/.config/fish/config.fish
, adicione:Não se esqueça de reiniciar sua instância de peixe reiniciando seu terminal para que as alterações sejam aplicadas.
Uso
Agora você pode usar
setclip
egetclip
, por exemplo:fonte
sudo pacman -S xclip
,. Mas observe que esse.bashrc
não é o melhor lugar. Eu recomendo que o usuário final leia os arquivos bashrc, bash_aliases e .profile adequados e como o bash lida com cada um. Dica: coloque-o em .bash_aliases.pacman
gerenciador de pacotes e removida a.bashrc
proposição. Eu sei que.bash_aliases
é mais adaptado, mas o resultado final é o mesmo (.bashrc
requer apenas.bash_aliases
se existir). Se as pessoas querem um sistema confuso, deixe-as ter um. :).bashrc
fontes.bash_aliases
no final. ;) Eu sigo esta convenção antiga, que permanece 100% compatível com as variantes Arch, Ubuntu / Debian, Raspberry, macOS / OSX e Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Com essa convenção, uso exatamente os mesmos arquivos de ponto em todas as máquinas Eu toco. É muito bom: github.com/eduncan911/dotfilesNo macOS, use os comandos embutidos
pbcopy
epbpaste
.Por exemplo, se você executar
o conteúdo do
~/.bashrc
arquivo estará disponível para colar com o atalhoCmd
+v
.fonte
Tentar
xclip
cara
fonte
xsel no Debian / Ubuntu / Mint
Instalar
fonte
echo "foo" | xclip -selection c
?xsel
exclip
são equivalentes em todos os aspectos, exceto quexclip
podem ler / gravar arquivos por nome, masxsel
requerem redirecionamento de shell se você deseja acessar um arquivo.xsel
está funcionando bem a partir de scripts, enquantoxclip
está funcionando apenas a partir do prompt. Não sei por que.Uau, não acredito em quantas respostas existem para essa pergunta. Não posso dizer que tentei todos eles, mas tentei os 3 ou 4 melhores 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. Como achei útil, decidi reafirmar em uma resposta.
Instale o utilitário xcopy e, quando estiver no Terminal, insira:
cópia de
Colar
Notei muitas respostas recomendadas pbpaste e pbcopy. Se você gosta desses utilitários, mas por algum motivo eles não estão disponíveis no seu repositório, sempre é possível criar um alias para os comandos xcopy e chamá-los de pbpaste e pbcopy.
Então, ficaria assim:
fonte
2018 resposta
Use 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 no seu.bashrc
,.bash_profile
ou.zshrc
:alias cb=clipboard
fonte
npm
pacote seguro ?No subsistema Windows para Linux, você pode copiar para a área de transferência com clip.exe.
Lembre-se de usar o
|
comando pipe. E não um>
comando, pois isso não vai funcionar.fonte
Aqui está um script bash pronto para usar para ler a área de transferência que funciona em várias plataformas. Por favor, edite o script aqui se você adicionar funcionalidade (por exemplo, mais plataformas).
fonte
No Windows (com Cygwin), tente
cat /dev/clipboard
ouecho "foo" > /dev/clipboard
conforme mencionado neste artigo.fonte
clip
. Estou usando o msysgit 1.9.5 e isso funcionou.echo "foo" > /dev/clipboard
parece destruir novas linhas completamente (não foi uma coisa \ r \ n \ n, mas desapareceu completamente) #Apenas para Mac:
Estes estão localizados
/usr/bin/pbcopy
e/usr/bin/pbpaste
.fonte
Existem diferentes pranchetas no Linux; o servidor X possui um, o gerenciador de janelas pode ter outro, etc. Não há dispositivo padrão.
Ah, sim, na CLI, o programa de tela também possui sua própria área de transferência, assim como outros aplicativos como Emacs e vi .
No X, você pode usar o xclip .
Você pode verificar esta discussão para outras respostas possíveis: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
fonte
Copie e cole na área de transferência no Windows (Cygwin):
Vejo:
Também existem o getclip (que pode ser usado em vez de Shift+ Ins!) E o putclip (echo oaeuoa | putclip.exe para colocá-lo em clipe).
fonte
Este é um script Python simples que faz exatamente o que você precisa:
Salve isso como um executável em algum lugar do seu caminho (salvei-o em
/usr/local/bin/clip
. Você pode inserir material a ser salvo na sua área de transferência ...E você pode canalizar o que está na sua área de transferência para outro programa ...
Executá-lo por si só simplesmente produzirá o que está na área de transferência.
fonte
cat tmpfile
, não operação da área de transferência. // o mesmo que respostas @horta.Encontrei uma boa referência: /unix/69111/
No meu caso, gostaria de colar o conteúdo na área de transferência e também para ver o que foi colado lá, então usei também o
tee
comando com um descritor de arquivo:>()
é uma forma de substituição de processo. bash substitui cada um pelo caminho para um descritor de arquivo conectado à entrada padrão do programa entre parênteses.o
tee
comando bifurca seu comando, permitindo que você "canalize seu conteúdo" e veja o resultado na saída padrão "stdout"você também pode criar aliases para obter e gravar na área de transferência, permitindo usar "pbcopy" e "pbpaste" como se estivesse no MAC. No meu caso, ao usar o zsh, tenho isso no meu arquivo de aliases:
o
(( $+command[name] ))
in zsh testa se o comando "name" está instalado no seu sistema, então os dois aliases são agrupados{}
. o&&
é um binário E, se a então b, portanto, se você tiver o xclip, os aliases serão definidos.Para obter o conteúdo da área de transferência, digite:
fonte
Faz o trabalho para o X Window, e ele já está instalado. Uma olhada na página de manual do xsel vale o esforço.
fonte
Alguns programas do Windows que escrevi anos atrás. Eles permitem despejar, empurrar, acrescentar e imprimir a área de transferência. Funciona assim:
Inclui código fonte: cmd_clip.zip
fonte
Existem algumas maneiras. Algumas das maneiras mencionadas incluem (eu acho) tmux, screen, vim, emacs e o shell. Eu não conheço emacs ou tela, então vou passar pelos outros três.
Tmux
Embora não seja uma seleção X, o tmux tem um modo de cópia acessível via
prefix-[
(prefix
é Ctrl+B por padrão). O buffer usado para esse modo é separado e exclusivo do tmux, o que abre muitas possibilidades e o torna mais versátil do que as seleções X nas situações certas.Para sair deste modo, pressione q; para navegar, use sua
vim
ouemacs
encadernação (padrão = vim); portanto,hjkl
para movimento,v/V/C-v
para seleção de caracteres / linha / bloco, etc. Quando você tiver sua seleção, pressioneEnter para copiar e sair do modo.Para colar nesse buffer, use
prefix-]
.Concha
Qualquer instalação do
X11
parece vir com dois programas por padrão:xclip
exsel
(meio como também vem com ambosstartx
exinit
). A maioria das outras respostas mencionaxclip
, e eu realmente gostoxsel
por sua brevidade, então vou cobrirxsel
.Do xsel (1x) :
E isso é tudo que você precisa saber.
p
(ou nada) paraPRIMARY
,s
paraSECONDARY
,b
paraCLIPBOARD
,o
para saída.Exemplo: digamos que eu quero copiar a saída de
foo
um TTY e colá-la em uma página da Web para obter um relatório de erro. Para fazer isso, seria ideal copiar para / da sessão TTY / X. Portanto, a pergunta passa a ser: como acesso a área de transferência a partir do TTY?Neste exemplo, assumiremos que a sessão X está em exibição
:1
.Então eu posso
Ctrl-V
colocá-lo no formulário como de costume.Agora diga que alguém no site de suporte me fornece um comando para executar para corrigir o problema. É complicado e longo.
Encomendar pizza parece ser um uso produtivo da linha de comando.
...se movendo.
Vim
Se compilado com
+clipboard
(Isso é importante! Verifique seuvim --version
), o Vim deve ter acesso ao XPRIMARY
e àsCLIPBOARD
seleções. As duas seleções são acessíveis nos registros*
e+
, respectivamente, e podem ser gravadas e lidas a seu tempo, da mesma forma que em qualquer outro registro. Por exemplo:Porém, se sua cópia do vim não suportar diretamente o acesso às seleções X, não será o fim do mundo. Você pode apenas usar a
xsel
técnica conforme descrito na última seção.Ligue alguns combos principais e você deve ser bom.
fonte
DISPLAY=
ao chamar um aplicativo X de um ambiente não-X. Os aplicativos X precisam daDISPLAY
variável de ambiente para descobrir com qual servidor (ou existe apenas um servidor gerenciando várias sessões?) Com o qual estão conversando. TenteDISPLAY=:1 firefox
(ou seja qual for o seu ID de exibição; o meu é o mesmo:1
) de um TTY, por exemplo.:%y+
no VIM.Nesse segmento, existe uma opção que não requer a instalação de nenhum software de
gclip
/xclip
/xsel
terceiros.Um script perl (já que o perl geralmente sempre é instalado)
fonte
O pbcopy é construído no OSX:
Copiando o conteúdo de .bash_profile:
fonte
No macOS, use
pbpaste
.Por exemplo:
Atualize a área de transferência
fonte
Se você é como eu e roda em um servidor Linux sem privilégios de root e não há xclip ou GPM, pode solucionar esse problema usando apenas um arquivo temporário. Por exemplo:
fonte
X selections
itens (o que é necessariamente implícito na "área de transferência" e nas menções ao xclip / xsel), você precisará de uma sessão X ativa (e, portanto, de um servidor X) para poder acessar a seleção no diretório primeiro lugar. Para entender o que quero dizer, tente executarDISPLAY="" xsel
na sua máquina local. Ele sairá com um erro, não podendo encontrar a sessão""
e nenhuma interação com nenhuma seleção X será feita. É por isso que eu disse inicialmente que não vejo como os privilégios de root são influenciados por isso: root ou no root, você provavelmente não encontrará uma seleção X útil em um ambiente de servidor.No Linux, isso funciona:
fonte
no Wayland, o xcopy parece não funcionar, use wl-clipboard . por exemplo, no fedora
fonte
Há também xclip-copyfile .
fonte
Embora> 1 ano depois, compartilhe uma solução um pouco diferente. Espero que isso seja útil para alguém.
Ontem, me deparei com a pergunta: "Como compartilhar a área de transferência entre diferentes sessões de usuário?" . Ao alternar entre sessões com ctrlaltF7-ctrlaltF8 , na verdade, você não pode colar o que copiou.
Eu vim com a seguinte solução rápida e suja , com base em um pipe nomeado. Certamente é bastante vazio e cru, mas achei funcional:
depois no terminal de envio
por último, no terminal receptor:
Agora, você digita ou cola qualquer coisa no primeiro terminal e (depois de pressionar return), ele aparecerá imediatamente no terminal de recebimento, de onde você pode copiar / colar novamente em qualquer lugar que desejar.
É claro que isso não apenas restringe o conteúdo da área de transferência do usuário1 para torná-lo disponível na área de transferência do usuário2, mas exige um par adicional de cliques em Colar e Copiar.
fonte
xsel/xclip
. Por exemplo, uma extremidade ouve para ver se alguma das seleções foi alterada e a canaliza automaticamente (via FIFO nomeado) para o outro script, que está ouvindo um ou mais canais, que a insere em sua própria seleção X. Copiar texto resultaria automaticamente no mesmo texto aparecendo na seleção da outra sessão X. E não se esqueça$DISPLAY
.O ruby oneliner me inspirou a tentar com python.
Digamos que queremos um comando que recua o que estiver na área de transferência com 4 espaços. Perfeito para compartilhar trechos no stackoverflow.
isso não é um erro de digitação. O Python precisa de novas linhas para fazer um loop for. Queremos alterar as linhas em uma passagem para evitar a criação de uma matriz extra na memória.
Se você não se importa em criar a matriz extra, tente:
mas honestamente o awk é melhor para isso do que python. Eu defini esse alias no meu
~/.bashrc
arquivoagora, quando corro o
indent
que estiver na minha área de transferência, é recuado.fonte