O problema aqui é que você está usando aspas duplas e usando uma substituição de comando direta, o que significa que o valor de $(basename $CONDA_DEFAULT_ENV)
(e, portanto, $CONDA_DEFAULT_ENV
) será avaliado apenas uma vez, quando essa linha de código for executada, e será incorporado ao PS1 como uma string textual.
A maneira como o bash processa PS1, ele avaliará $(...)
sequências toda vez que o prompt for impresso, então o que você precisa fazer é preservar a sequência em sua forma literal (escapando o $
s com barras invertidas, por exemplo ), que deve render o resultado que você está procurando.
Então, isso deve funcionar:
PS1+="\[${cyan}\]<\$(basename \$CONDA_DEFAULT_ENV)> ";
Ou melhor, adicione aspas duplas em torno da variável, para que o comando basename
continue funcionando se $CONDA_DEFAULT_ENV
tiver espaços ou se estiver vazio ou não definido:
PS1+="\[${cyan}\]<\$(basename \"\$CONDA_DEFAULT_ENV)\"> ";
Note que não escapei de ${cyan}
, pois não há problema em avaliar isso apenas uma vez, pois não é esperado que mude ...
Os metacaracteres de escape (como $
e "
) começam a ficar pesados em algum momento, portanto, usar aspas simples para preservar a string textualmente é provavelmente uma escolha melhor em algum momento, então podemos fazer isso. Mas, como queremos continuar expandindo ${cyan}
, vamos misturar aspas duplas e aspas simples para obter o resultado desejado com o mínimo de escape:
PS1+="\[${cyan}\]"'<$(basename "$CONDA_DEFAULT_ENV")> ';
Você ainda pode ter problemas com a configuração da cor para ciano sem redefini-la no final ... Mas isso deve ser fácil de corrigir, adicionando outro bloco "\[${...}\]"
no final com o código para redefinir a formatação (não tenho certeza De onde vêm as constantes de cor, verifique isso no código de reinicialização.) Mas é possível que isso não seja um problema em seu ambiente específico, se houver outras linhas anexando ao PS1 para modificá-lo, que também estão alterando a cor. (O que eu imagino é o seu caso, já que você diz o que você tem quando você cria seu perfil.)