Em um prompt bash (variável PS1), estou chamando uma função para potencialmente adicionar texto ao prompt: export PS1="\u@\h \$(my_function) \$ "
No entanto, a função no prompt contém códigos de cores ANSI que são alterados com base na saída da função (às vezes vermelho, às vezes verde). Adicionar " \[
" à variável PS1 deve escapar desses códigos como não imprimíveis, mas se eu fizer um echo
na função, o " \[
" será impresso literalmente no prompt.
Como posso escapar desses códigos de cores ANSI de uma função para uso em um prompt do bash?
echo -e "\001\e[31m\002RED"
funciona como esperado. Obrigado!\001
e\002
funcionarão. Caso contrário, não tenho certeza. O Dash, por exemplo, definitivamente não usa o readline .Aqui está uma boa resposta completa. Eu tive que fazer muito mais escavações para descobrir aonde os \ 001 etc. tinham que ir. Espero que isto ajude.
Do jeito que eu o configurei aqui, os parênteses do ramo git aparecerão apenas se você estiver em um ramo git, caso contrário, ficará em branco.
fonte
Com base na resposta do grawity , o seguinte incluirá sequências de controle ANSI em ASCII
SOH
(^A
) eSTX
(^B
) que são equivalentes\[
e,\]
respectivamente:Use-o como:
Ou:
Como bônus, executar a função várias vezes não escapará novamente aos códigos de controle que já escaparam.
fonte
Se você quiser usá-los no prompt, precisará fazer o
\[
. Mas se você quiser usá-lo em um eco, precisará usá-lo\033[
.fonte