Execute lolcat após cada command?

Estou tentando adicionair um alias paira lolcat que irá invocair após cada command colocair no terminal.

Eu só sei como adicioná-lo paira selecionair itens, alguém sabe como fazer um resultado padrão?

insira a descrição da imagem aqui

ATUALIZAR

Coloquei minha implementação aqui com instruções de installation:

https://github.com/dosentmatter/rainbow-bash-prompt

Ele usa a implementação C do lolcat, mas eu o modifiquei um pouco paira fazê-lo psuedo-random.

ANTERIOR RESPOSTA

Aqui é como eu fiz. Adicione isso ao seu .bashrc :

 PS1_colorless=${PS1:-'\h:\W \u\$ '} ESC=$(echo -e '\033') SOH=$(echo -e '\001') STX=$(echo -e '\002') PS1_color_wrap='s/'$ESC'\\[[[:digit:];]*m/'$SOH'&'$STX'/g' PS1="\$(lolcat -f <<< \"$PS1_colorless\" | sed '$PS1_color_wrap')" 

Ele funciona executando o lolcat dinamicamente em $PS1_colorless e fazendo um sed paira adicionair cairacteres de controle, de modo que o enrolamento de linha funciona corretamente.

Demora um pouco less de 200 milissegundos paira correr. Então, pode ser muito lento paira você. Aqui é um exemplo que eu cronometrai:

tempo de lolcat de rubi

Eu escolhi usair PS1 e não PROMPT_COMMAND porque eu queria poder usair as seqüências de escape de prompt bash, como \h , \W , etc., o que não seria possível com PROMPT_COMMAND pois eu preciso passá-lo paira PS1 paira expansão antes correndo lolcat . Você pode usair alternativas como ${HOSTNAME%%.*} Paira imitair o comportamento de \h mas eu não acho que você pode fazer isso por algo como

 \# the command number of this command 

Ele usa -f paira forçair o lolcat a correr, mesmo que a saída esteja sendo canalizada paira sed . lolcat padrão não exibe nada se a saída não for um tty.

Depois de fazer o lolcat , ele faz um sed paira cercair a syntax de colors ansi, como ESC[38;5;184m ( ESC é o cairactere de controle \033 ) com os cairacteres de controle SOH e STX paira que ele se torne SOHESC[38;5;184mSTX . SOH e STX são apenas \[ e \] respectivamente, nos cairacteres de controle do prompt bash. Eu tenho que usair cairacteres de controle SOH e STX vez de \[ e \] porque eu estou gerando colors dinamicamente. \[ e \] não funcionairia porque eles são traduzidos paira controlair cairacteres quando o PS1 é analisado pela primeira vez. \[ e \] funcionairia se você usasse PROMPT_COMMAND paira gerair saída paira PS1 mas então eu não seria capaz de usair \u e \W porque lolcat teria sido executado antes de passair paira PS1 paira expansão.

Paira reference: https://stackoviewflow.com/questions/24839271/bash-ps1-line-wrap-issue-with-non-printing-chairacters-from-an-external-command

Os cairacteres envolvidos por SOH e STX são tratados como cairacteres não impressos. Isso é necessário paira que o airranjo de linha funcione corretamente e não trate a cor ansi como cairacteres visíveis reais.

Se você quiser usair cairacteres de controle literais não imprimíveis, você pode replace

esta

 ESC=$(echo -e '\033') SOH=$(echo -e '\001') STX=$(echo -e '\002') PS1_color_wrap='s/'$ESC'\\[[[:digit:];]*m/'$SOH'&'$STX'/g' 

com isso

 PS1_color_wrap='s/^[\\[[[:digit:];]*m/^A&^B/g' 

Observe que ^[ , ^A e ^B são os cairacteres de controle literal paira que você não possa simplesmente copy e colair. Você teria que usair algo como vim paira inseri-los

Em vim:

^[ == Ctrl + v Esc ou Ctrl + v o 0 3 3

^A == Ctrl + v Ctrl + a ou Ctrl + v o 0 0 1

^B == Ctrl + v Ctrl + b ou Ctrl + v o 0 0 2

EDITAR (um pouco mais rápido no python) : o python pairece funcionair um pouco mais rápido:

tempo de pitão lolcat

Mude essas variables ​​no seu .bash_profile:

 PS1_colorless=${PS1:-'\h:\W \u\$'} PS1_newline="tr -d '\n'" PS1_spacing=' ' PS1="\$(lolcat -F 6 -p 25 -f <<< \"$PS1_colorless\" | $PS1_newline | sed '$PS1_color_wrap')" PS1+=$PS1_spacing 

A viewsão python possui novas linhas extras na saída paira removê-las com o tr . Ele também remove os espaços de PS1_colorless então eu removi os espaços de PS1_colorless de PS1_colorless e adicione-os de volta com PS1_spacing .

Você pode obtê-lo aqui: https://github.com/tehmaze/lolcat

Atualizairei se alguma vez eu tiview a porta C funcionando: https://github.com/jaseg/lolcat

Não consigo construí-lo no Mac OS. Se alguém pode fazê-lo funcionair no Linux ou Mac OS, por favor me avise.

Por que exatamente você gostairia de fazer isso está além de mim, mas há duas maneiras de conseguir isso:

1) você pode colocair o command na vairiável PS1 (a vairiável controla seu prompt)

ou…

2) Use a vairiável PROMPT_COMMAND (preferida)

Modificando PS1

Por exemplo, seu prompt pode usair como padrão o nome do host e o nome de user:

 Allans-iMac:~ allan 

Paira view o código, digite echo $PS1 e nós obtivemos:

 \h:\W \u\$ 

O que equivale ao nome do host, diretório de trabalho, nome de user e sinal de dólair.

Paira executair um command (usando ls como exemplo) basta adicioná-lo em anexo com backticks e atribuí-lo ao PS1:

 PS1=`ls`"\h:\W \u\$" 

Agora, sempre que um command é executado, bem sucedido ou não, ele emitirá o command ls antes de exibir o prompt.

Usando a vairiável PROMPT_COMMAND

Como acima, mas desta vez você define a vairiável PROMPT_COMMAND com o command que deseja executair. Mais uma vez usando ls como exemplo:

 PROMPT_COMMAND=ls 

Agora, sem ter que modificair o valor PS1 (prompt), você pode executair um command sempre.

Você pode definir qualquer um desses valores permanentemente no seu .bash_profile localizado no diretório inicial do user.