zsh
Tente isto:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Aqui está um resumo do prompt:
- PROMPT_SUBST ativa a substituição de comando no prompt (e expansão de parâmetro e expansão aritmética)
-
%{...%}
- uma sequência de escape -
$(pwd|grep --color=always /)
- imprime o diretório atual e destaca o/
- a cor dependerá da variável de ambiente $ GREP_COLORS (ou seu valor padrão) - o negrito vermelho é o padrão -
%${#PWD}G
- use o comprimento em caracteres do nome do diretório atual como um valor de glitch. Isso faz com que o shell considere isso o comprimento da seqüência de caracteres anterior (após o "%{
") em vez do comprimento real da seqüência de caracteres que inclui seqüências de escape ANSI. Isso impede que o shell fique confuso sobre a posição do cursor em relação ao final do prompt.
- - - - - - - este é o fim da parte que responde sua pergunta - - - - - - - -
%(!.%F{red}.%F{cyan})
- se este for um shell privilegiado (root), defina a cor do primeiro plano para vermelho, caso contrário, ciano -
%n
- gera o nome de usuário -
%f
- redefine a cor do primeiro plano para o padrão -
@
- um literal no sinal -
%F{yellow}
- torna a cor do primeiro plano amarela -
%m
- produz o nome do host -
%f
- redefine a cor do primeiro plano para o padrão -
%(!.%F{red}.)
- se for um shell privilegiado (root), defina a cor do primeiro plano para vermelho -
%#
- imprime#
para um shell privilegiado ou%
para um desfavorecido -
%f
- redefine a cor do primeiro plano para o padrão
Eu coloquei o caminho primeiro neste prompt para ênfase, uma vez que a questão diz respeito ao caminho.
Aquiestáumaversãoparazshquealteraacordabarradependendosevocêéroot(privilegiado)manipulandoavariável$GREP_COLORS
:
setoptPROMPT_SUBSTPROMPT='%{$(pwd|([[$EUID==0]]&&GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Bash
Você pode fazer um prompt semelhante no Bash. Neste exemplo, coloquei o usuário e o nome do host primeiro e a cor das barras também muda quando o UID é 0. Aviso: isso sobrescreve a variável de prompt $PS1
do Bash. Isso não deve ser um problema, a menos que você esteja fazendo algo especial ou espere que o comportamento mude quando você definir essa variável diretamente e isso estiver em vigor. Além disso, isso usa uma variável chamada " usercolor
", que pode colidir com outra coisa, embora essa coisa toda possa ser colocada em uma função e a variável declarada local.
PROMPT_COMMAND='usercolor="\[3[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[3[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[3[0m\]@\[3[0;33m\]\h\[3[0m\]:${PS1//\//$usercolor/\[3[0m\]}$usercolor\$\[3[0m\] "'
EuaproveiteiofatodequeoBashnãotemorecurso"glitch" do zsh para usar a substituição de expansão de parâmetro para colorir condicionalmente as barras (em vez de usar o grep).