Canalizar para / da área de transferência no script Bash


946

É 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/clipfosse 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

3
Eu tenho usado :%y+no vim, que é o vim-speak para "puxar (copiar) todas as linhas do registro '+' (a PRIMARYá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 o xclipcomando 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.
Braden Best

1
@BradenBest, você deve colocar isso como uma resposta. Estou em um ambiente NIX e não consegui instalar xclip. Sua resposta funcionou como um encanto.
HankCa 11/05

@HankCa Ok, eu postei uma resposta . Me diga o que você acha.
Braden Best

@BradenBest é uma resposta muito abrangente. Eu gostei do :%y+primeiro, mas ok, você tem todas as bases cobertas! Um bom.
HankCa

Outra opção: usando um pequeno script perl: não requer instalação. Veja minha resposta abaixo .
VonC 23/09

Respostas:


863

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 cenviará 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 gpmou tela que tem uma área de transferência. Tente o screencomando readreg.

No Windows 10+ ou cygwin, use /dev/clipboardou clip.



24
no Windows, /dev/clipboardtambém trabalha para os reservatórios festança Msys / MinGW
Mihai Rotaru

71
Note que xclip -selection cirá enviar os dados para a área de transferência que funciona com ^ C, ^ V na maioria das aplicações
Klaas van Schelven

31
nas versões mais recentes do Windows, você pode apenas usar clipassim:dir | clip
maep

11
É triste que o GNU / Linux não tenha um dispositivo como esse /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) .
Hi-Angel

282

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.

echo test | xclip    

Ctrl+v === test


1
Como alguém poderia colá-lo sem esse argumento de comando?
Jonah

15
xclip -selection clipboard -o
doug

32
Como eu ando muito entre osx e linux, tenho o seguinte nos meus arquivos de pontos. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Espero que ajude.
doug

15
@ApockofFork, xclipnão está adicionando uma nova linha, echoestá. Tente printf test | xclip -i -selection clipboard. ( printfDoesnt adicionar uma nova linha a menos que você escrever 'test\n'.)
David X

7
Ou use em echo -nvez de printf.
Christian Pietsch

182

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 tem acesso apt-getnem pacman, nem dnf, as fontes estã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 se esqueça de carregar sua nova configuração usando . ~/.bash_aliasesou 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 sua instância de peixe reiniciando seu terminal para que as alterações sejam aplicadas.

Uso

Agora você pode usar setclipe getclip, por exemplo:

$ echo foo | setclip
$ getclip
foo

3
Para todas as outras distros: você pode baixar o código fonte do sourceforge.net/projects/xclip
SCz

+1 Melhor solução! No arco sudo pacman -S xclip,. Mas observe que esse .bashrcnã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.
eduncan911

1
Obrigado @ eduncan911! :) Adicionada a opção de usar o pacmangerenciador de pacotes e removida a .bashrcproposição. Eu sei que .bash_aliasesé mais adaptado, mas o resultado final é o mesmo ( .bashrcrequer apenas .bash_aliasesse existir). Se as pessoas querem um sistema confuso, deixe-as ter um. :)
tleb 19/09/2015

@EladTabak Feliz por ter ajudado.
tleb

1
@jpaugh você está correto. minhas .bashrcfontes .bash_aliasesno 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/dotfiles
eduncan911 5/17

143

No macOS, use os comandos embutidos pbcopye pbpaste.

Por exemplo, se você executar

cat ~/.bashrc | pbcopy

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



25

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

Como isso difere echo "foo" | xclip -selection c?
Léo Léopold Hertz,

Existem algumas respostas nesta resposta do Ask Ubuntu , mas principalmente xsele xclipsão equivalentes em todos os aspectos, exceto que xclippodem ler / gravar arquivos por nome, mas xselrequerem redirecionamento de shell se você deseja acessar um arquivo.
Colin D Bennett

xselestá funcionando bem a partir de scripts, enquanto xclip está funcionando apenas a partir do prompt. Não sei por que.
NVRM 19/10/19

16

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

Thing_you_want_to_copy|xclip -selection c

Colar

myvariable=$(xclip -selection clipboard -o)

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.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Então, ficaria assim:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Ótimo, sua parte de alias corresponde ao MacOS muito bem.
MeadowMuffins

15

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_profileou .zshrc:

alias cb=clipboard


2
Tem certeza de que é um npmpacote seguro ?
21418 Johnny

3
@Stas, eu espero que sim, é feito pelo Sindresorhus ( github.com/sindresorhus ), o colaborador de nó mais prolífico. Ele é responsável pela biblioteca de testes da Ava, pelo xo linter, Yeoman e por inúmeros outros projetos. Ele também é responsável por inúmeras pequenas bibliotecas como essa, que coletivamente colocam seu código em quase todos os sites que usam JS na Internet. Isso não quer dizer que ele não possa ser comprometido; apenas que a quantidade de olhos em seus repositórios e sua própria reputação o tornam muito menos provável do que a maioria dos repositórios aleatórios da NPM.
Evan Conrad

Legal! Trabalhando no Ubuntu GNU / Linux onde o xclip não está funcionando.
Kevin Buchs

14

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, pois isso não vai funcionar.


11

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).

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp

bruhh, isso realmente funciona porque não é essa a resposta?
255.tar.xz 01/06/19

9

No Windows (com Cygwin), tente cat /dev/clipboardou echo "foo" > /dev/clipboardconforme mencionado neste artigo.


1
Como o usuário @maep mencionado em um comentário separado, as versões mais recentes do Windows (só posso confirmar para o Win10) podem simplesmente ser acessadas clip. Estou usando o msysgit 1.9.5 e isso funcionou.
Shawn Erquhart

echo "foo" > /dev/clipboardparece destruir novas linhas completamente (não foi uma coisa \ r \ n \ n, mas desapareceu completamente) #
user1529413 11/11/19

9

Apenas para Mac:

echo "Hello World" | pbcopy
pbpaste

Estes estão localizados /usr/bin/pbcopye /usr/bin/pbpaste.


8

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


2
Parece que criar / dev / clip seria um bom projeto para alguém.
TED

2
Estou perfeitamente ciente das várias pranchetas. Como isso torna minha pergunta mais difícil de responder?
moinudin

Faria sentido se as pranchetas fossem padronizadas, provavelmente não faria mal se você pudesse usar / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> para acessá-las, o único problema é que elas são específicas do usuário e dispositivos são de todo o sistema. Mas se você criar um driver de dispositivo do kernel que mascara de acordo com o UID de acesso, ele deve funcionar conforme o esperado.

5

Copie e cole na área de transferência no Windows (Cygwin):

Vejo:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

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).


4

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 do seu caminho (salvei-o em /usr/local/bin/clip. Você pode inserir material a ser salvo na sua área de transferência ...

echo "Hello World" | clip

E você pode canalizar o que está na sua área de transferência para outro programa ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Executá-lo por si só simplesmente produzirá o que está na área de transferência.


Isso funciona quando você está em um único computador, mas não permite copiar coisas entre computadores.
Charles Plager

parece apenas `echo str> tmpfile` e cat tmpfile, não operação da área de transferência. // o mesmo que respostas @horta.
yurenchen 26/09/17

isso não parece definir a variável da área de transferência, então não consigo colar o conteúdo em outro aplicativo - não é uma área de transferência real!
Jena

4

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 teecomando com um descritor de arquivo:

echo "just a test" | tee >(xclip -i -selection clipboard)

>()é 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:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

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.

echo "another test" | tee >(pbcopy)

Para obter o conteúdo da área de transferência, digite:

pbpaste | "any-command-you-need-here"


2

Alguns programas do Windows que escrevi anos atrás. Eles permitem despejar, empurrar, acrescentar e imprimir a área de transferência. Funciona assim:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Inclui código fonte: cmd_clip.zip


2

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 vimou emacsencadernação (padrão = vim); portanto, hjklpara movimento, v/V/C-vpara 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 X11parece vir com dois programas por padrão: xclipe xsel(meio como também vem com ambos startxe xinit). A maioria das outras respostas menciona xclip, e eu realmente gosto xselpor sua brevidade, então vou cobrir xsel.

Do xsel (1x) :

Opções de entrada

-a, --append

anexar entrada padrão à seleção. Implica -i .

-f, --follow

acrescente à seleção à medida que a entrada padrão cresce. Implica -i .

-i, --input

leia a 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, --clear

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 PRIMARY (padrão).

-s, --secondary

operar na seleção SECUNDÁRIA.

-b, --clipboard

operar na seleção CLIPBOARD.

E isso é tudo que você precisa saber. p(ou nada) para PRIMARY, spara SECONDARY, bpara CLIPBOARD, opara saída.

Exemplo: digamos que eu quero copiar a saída de fooum 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.

$ 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-Vcolocá-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.

$ 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

Encomendar pizza parece ser um uso produtivo da linha de comando.

...se movendo.

Vim

Se compilado com +clipboard(Isso é importante! Verifique seu vim --version), o Vim deve ter acesso ao X PRIMARYe às CLIPBOARDseleçõ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:

:%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

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 xseltécnica 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`

Ligue alguns combos principais e você deve ser bom.


Definitivamente sempre lembre-se de usar DISPLAY=ao chamar um aplicativo X de um ambiente não-X. Os aplicativos X precisam da DISPLAYvariável de ambiente para descobrir com qual servidor (ou existe apenas um servidor gerenciando várias sessões?) Com o qual estão conversando. Tente DISPLAY=:1 firefox(ou seja qual for o seu ID de exibição; o meu é o mesmo :1) de um TTY, por exemplo.
Braden Best

Para mim, a escolha no meu ambiente foi :%y+no VIM.
HankCa 15/05

2

Nesse segmento, existe uma opção que não requer a instalação de nenhum software de gclip/ xclip/ xselterceiros.

Um script perl (já que o perl geralmente sempre é instalado)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Como eu usaria isso? Salvar script no PATH e canalizar para ele? Estou tentando escrever o wrapper do dropbox cli para copiar os links de compartilhamento, então só preciso dele para manipular texto.
Jena


2

O pbcopy é construído no OSX:

Copiando o conteúdo de .bash_profile:

cat ~/.bash_profile | pbcopy

1

No macOS, use pbpaste .

Por exemplo:

Atualize a área de transferência

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

1

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:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Não vejo como a falta de privilégios de raiz é fator nisso.
Braden Best

3
@BradenBest A falta de privilégios de root significa que não consegui instalar as coisas.
horta 16/05

Mas o que você instalaria? X? Em um servidor? A menos que você esteja hospedando algum serviço de encaminhamento X estranho, não consigo entender por que você gostaria de fazer isso.
Braden Best

@BradenBest Não tenho certeza. Qualquer que seja o programa ou serviço que me permita executar uma pasta de cópia.
Horta #

1
Bem, se você estiver usando algum dos X selectionsitens (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 executar DISPLAY="" xselna 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.
Braden Best


1

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


0

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:

user1@host:~$ mkfifo /tmp/sharedClip

depois no terminal de envio

user1@host:~$ cat > /tmp/sharedClip

por último, no terminal receptor:

user2@host:~$ cat /tmp/sharedClip

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.


Não parece muito surpreendente. Dois servidores X diferentes = dois conjuntos de seleção diferentes. No entanto, você pode configurar um script que aceita entrada / saída via 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.
Braden Best

0

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.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

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:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

mas honestamente o awk é melhor para isso do que python. Eu defini esse alias no meu ~/.bashrcarquivo

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

agora, quando corro o indentque estiver na minha área de transferência, é recuado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.