Como canalizar a saída padrão do terminal (stdout) para a área de transferência?

106

Por exemplo,

Digamos que eu queira listar o conteúdo de uma pasta e colá-lo diretamente em uma janela de bate-papo para um amigo ver.

Sei que poderia fazer ls > filename.txtpara criar um arquivo (filename.txt) com esse conteúdo; Eu teria que abrir ou imprimir o arquivo e selecionar e copiar manualmente o bloco de texto (o que pode ser chato / entediante .) Eu também poderia selecionar e copiar a saída lsdiretamente da janela do terminal.

Seria muito mais rápido / fácil canalizar simplesmente a saída padrão para a área de transferência .

Que comando do terminal me permite fazer isso?

Insperatus
fonte
1
unix.stackexchange.com/questions/3892/…
Ciro Santilli escreveu:

Respostas:

122

Isto pode ser feito com qualquer XSEL ou xclip utilitários de linha de comando. Como nenhum dos programas vem com o Ubuntu por padrão, você precisará primeiro instalá-los via Ubuntu Software ou pelo terminal. Aqui está como no terminal (mas lembre-se de que você só precisa de um desses dois).

sudo apt install xsel
sudo apt install xclip

Agora alguns exemplos. Se você deseja copiar a saída lspara a área de transferência, aqui está o que você faria:

Com o xsel:

ls | xsel -ib

Com o xclip:

ls | xclip -sel clip

Obviamente, isso também pode ser utilizado para outros comandos do terminal . Digamos que você deseja colar as informações da sua rede em um fórum de ajuda.

Com o xsel:

sudo lshw -C network | xsel -ib

Com o xclip:

sudo lshw -C network | xclip -sel clip

Torne isso ainda mais fácil com um novo alias do bash!

Edite seu ~/.bash_aliasesarquivo (se ele ainda não existir, crie-o primeiro com touch ~/.bash_aliases)

Em seguida, adicione um (dependendo do programa que você decidiu seguir) dos seguintes itens:

alias copy='xclip -sel clip'

ou

alias copy='xsel -ib'

Salve e feche.

Agora (após reiniciar o seu terminal), você pode enviar a saída padrão para a área de transferência, canalizando-a para 'copiar' (ou o que você decidir nomear seu novo apelido)

Por exemplo:

ls | copy
Insperatus
fonte
1
Com versões mais recentes do Ubuntu, você deve usar apt. Então sudo apt install xselou sudo apt install xclip.
25617 wisbucky
1
Obrigado pela resposta, mas você sabe alguma coisa apenas para o terminal Linux?
Mohamad 29/03
1
@jpaugh. Compare a documentação de gerenciamento de pacotes do Ubuntu para 16.04 vs 14.04 . Em 16.04, apenas menciona apte não apt-get. Você ainda pode usar apt-get, mas eles estão tentando incentivar as pessoas a usar apt.
wisbucky
2
Você não precisa reiniciar o terminal; você pode apenassource ~/.bash_aliases
Rob K
1
@Mohamad São para rodar dentro de um servidor X (pois fornece a funcionalidade da área de transferência). Se você não tiver isso, precisará fazê-lo no emulador de terminal. Como fazer isso, depende do software real que você está usando, pois não há um padrão de fato para isso.
Thorbjørn Ravn Andersen
2

Se você estiver tentando copiar para a área de transferência usando o Ubuntu no Windows Subsystem para Linux (WSL), o xsel ou o xclip não funcionará, a menos que você esteja usando o X Windows, pois a área de transferência é apenas gráfica. No entanto, para canalizar a saída padrão do terminal para a área de transferência no WSL Ubuntu, você pode usar clip.exe. Você pode colar no terminal WSL Ubuntu com comandos padrão de colar e o texto copiado também estará disponível no Windows. Por exemplo,

pwd | clip.exe 

copiará o diretório de trabalho atual para a área de transferência (Windows).

Este resultado da pesquisa aparece na parte superior ao procurar maneiras de copiar / colar texto na WSL, então acho que vale a pena mencionar isso para que os leitores não instalem desnecessariamente o xsel ou o xclip no Ubuntu e, em vez disso, o usem clip.exe.

Snap Shot
fonte