No bash como posso alterar a cor do meu prompt de comando? [duplicado]

11

Quando executo um comando, muitas vezes tenho dificuldade em encontrar o início da saída do comando. Uma solução fácil para isso seria colorir ou negrito o prompt de comando para que eu possa ver facilmente onde parei. Como?

    
por John Berryman 06.07.2011 / 00:26

5 respostas

17

Aqui está o que eu faço. Eu uso tput (1) em vez de instruções de escape adicionais, porque as instruções de escape são difíceis para os humanos lerem.

Isso é do meu .bashrc

### Set the prompt like "username@hostname:~ $"
# See: http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/
# And: http://mywiki.wooledge.org/BashFAQ/037
# 'tput bold' will work regardless of the foreground and background colors.
# Place the tput output into variables, so they are only execd once.
bold=$(tput bold)
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "

Aqui está outra alternativa. Isso é muito mais legível do que sequências de escape.

# Bash
red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 4)
reset=$(tput sgr0)
PS1='\[$red\]\u\[$reset\]@\[$green\]\h\[$reset\]:\[$blue\]\w\[$reset\]\$ '
    
por 06.07.2011 / 01:15
3

Para facilitar o uso, você pode primeiro mapear suas cores no seu .bashrc e, em seguida, reutilizá-las na sua variável de prompt ( $PS1 ):

Passo 1: Mapear as cores:

#~/.bashrc

# Color mapping
grey='\[3[1;30m\]'
red='\[3[0;31m\]'
RED='\[3[1;31m\]'
green='\[3[0;32m\]'
GREEN='\[3[1;32m\]'
yellow='\[3[0;33m\]'
YELLOW='\[3[1;33m\]'
purple='\[3[0;35m\]'
PURPLE='\[3[1;35m\]'
white='\[3[0;37m\]'
WHITE='\[3[1;37m\]'
blue='\[3[0;34m\]'
BLUE='\[3[1;34m\]'
cyan='\[3[0;36m\]'
CYAN='\[3[1;36m\]'
NC='\[3[0m\]'

Etapa 2. Redefinir sua variável PS1:

PS1="$yellow[$CYAN\t$yellow][$red\H$yellow][$GREEN\w$grey$yellow]$NC# "
    
por 06.07.2011 / 11:23
1

Há uma excelente página de referência descrevendo como colorir o prompt do bash no wiki do Arch Linux .

Inclui informações sobre as cores, as seqüências de escape e a maneira correta de incluir outros caracteres ou para imprimir informações no prompt, como o diretório, o host, etc.

Como exemplo, um prompt simples como:

PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '

Pode ser dividido nesses elementos:

\[\e[1;32m] - um colchete de abertura impresso em verde (1; 32m)

[\u@h \W] - username @ hostname e o nome da base do diretório de trabalho atual

\$ - o prompt (a # se o UID for 0)

\[e[0m\] - o escape de redefinição de texto sinalizando o fim da sequência de cores.

Usando essas sequências, você pode criar um prompt colorido e informativo.

Uma palavra de cautela: se você não conseguir escapar corretamente das sequências, poderá causar estragos na capacidade do seu terminal de imprimir texto.

    
por 06.07.2011 / 01:22
0

Aqui está o meu do meu .bashrc:

case $HOSTNAME in
    plato*) PSC="\e[1;33m" ;;
    *) PSC="\e[36m" ;;
esac

PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "

Edite a gosto. Este também usa uma cor diferente para minha estação de trabalho principal vs. outros hosts.

    
por 06.07.2011 / 00:50
0

Eu gosto do jeito que o Gentoo faz:

"\[3[01;32m\]\u@\h\[3[01;34m\] \W \$\[3[00m\] "

Basta adicioná-lo a ~/.bashrc da seguinte forma:

echo 'export PS1="\[3[01;32m\]\u@\h\[3[01;34m\] \W \$\[3[00m\] "' | tee -a ~/.bashrc

Você pode sair do seu terminal / console ou apenas source ~/.bashrc

    
por 06.07.2011 / 01:24