Como modifico minha variável conda env no meu terminal?

3

Gostaria de personalizar meu prompt de terminal. Normalmente, quando um ambiente conda é ativado, o nome do ambiente é anexado à string PS1. Eu gostaria de personalizar isso um pouco mais, mas não consegui descobrir isso.

Se eu adicionar changeps1: false ao meu arquivo .condarc , o prompt do terminal não será modificado quando eu ativar um novo ambiente. Eu posso então modificar a variável de ambiente no meu .bash_profile por exemplo:

PS1+="\[${cyan}\]<$(basename $CONDA_DEFAULT_ENV)> ";

Isso retorna o nome do ambiente colorido como eu gostaria rodeado de cenouras, porém isso só funciona depois que eu corro source .bash_profile ativando o ambiente não tem efeito, o que não é inesperado.

Minha pergunta é como atualizar o prompt ao ativar o ambiente, ou há uma maneira melhor de fazer isso?

Isso está relacionado a esta pergunta

E este perfil de exemplo No entanto, eles não abordam diretamente o problema que Estou correndo do prompt não mudando ao ativar ambientes

    
por johnchase 03.10.2018 / 01:15

1 resposta

2

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.)

    
por 17.10.2018 / 05:18