Personalizando o shell bash: Negrito / colorido o comando

13

Existem vários tutoriais / postagens on-line (por exemplo, link ) sobre como personalizar seu prompt no bash definindo PS1 . Existe uma maneira de personalizar a cor / negrito do comando que eu digito?

Em outras palavras, como exemplo, digamos que eu queria um prompt verde, um comando azul em negrito e, em seguida, imprimi-lo em qualquer cor que fosse o padrão. No exemplo abaixo, eu já sei como fazer com que " joe> " seja exibido em verde, azul, negrito, seja qual for, configurando PS1 . Mas existe uma maneira que eu possa fazer git status mostrar como negrito por exemplo?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...
    
por jlarson 15.09.2011 / 20:24

3 respostas

12

Você teria que deixar um rastro de cor após o PS1 (inicie-o após > em seu exemplo) e use o bash DEBUG trap para limpar a cor antes do comando ser executado (mas depois de pressionar entre no seu shell. Tente algo assim:

shopt -s extdebug
trap "tput sgr0" DEBUG
    
por 15.09.2011 / 20:54
4

Para completar, veja como definir uma cor de prompt e a cor de entrada da linha de comando no bash. Coloque estas linhas no seu .bashrc .

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \e[0m' DEBUG

A armadilha DEBUG, como sugerida por Chris Down , é usada para redefinir os atributos de texto. Ele é destinado à depuração, mas é também útil para executar código antes de executar o comando digitado pelo usuário .

Na configuração do prompt:

  • \[…\] é usado em torno de seqüências de escape para dizer que eles não usam nenhuma propriedade de tela (sem eles, a tela se tornará truncada quando o bash precisar redesenhar o prompt).
  • \e[…m onde é um número, ou mais geralmente uma sequência de números separados por ponto e vírgula, são sequências de escape enviado para o terminal para afetar a cor e outros atributos do texto a seguir. Por exemplo, 1;34 define negrito azul; 0;32 redefine todos os atributos e depois muda a cor para verde. Ajuste a gosto.
  • \w\$ imprime o diretório atual e $ ou # . É claro que você pode alterar isso para o que quiser e inserir alterações de atributos de texto entre as opções, se desejar.
  • Há uma alteração final de atributo no final, que define a cor da entrada de texto.
por 05.01.2016 / 01:29
0

Estou apenas aprendendo sobre comandos BASH e tenho estado sentado aqui brincando com os comandos de cores da minha versão. Eu descobri essa solução:

Usando este comando:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

Desconstruir: PS1 =: inicia o comando PS1

'': contém o comando entre aspas simples (então o BASH não acha que é um comando para ele)

\: cada comando individual começa com este

[]: contém cada comando

\ e (também pode ser \ 033 um caractere de escape ASCII): inicia um comando de cor

O comando color precede a coisa a que se aplica.

[\ e [0; 36m]: ciano

\ h: nome do host

'>' : impresso após o nome do host

[\ e [0; 31m]: vermelho

Aparentemente, o comando vermelho no final torna a entrada vermelha. Basta mudar as cores ao seu gosto e é isso que você está procurando.

Além disso, este site me ajudou um pouco:

link

Minha versão: GNU bash, v. 4.2.46

Cuidado,

Weasel

    
por 13.10.2017 / 19:01

Tags