Estou tentando fazer o PS1 configurado da seguinte maneira.
Verde = "\ [\ e [32; 1m \]" Vermelho = "\ e [0; 31m" Roxo = "\ e [0; 35m" STARTCOLOR = "\ [\ e [40m \]" ENDCOLOR = "\ [\ e [0m \]" exportar PS1 = "$ STARTCOLOR $ Verde \ u @ $ Roxo \ h $ Vermelho \ w $ Verde> $ ENDCOLOR"
E eu tenho algumas perguntas.
- Qual é a diferença entre "[\ e [32; 1m]" e \ e [32; 1m "? Eles são iguais?
- Depois de executar o comando 'export PS1', ele funciona bem, mas quando dou 20 caracteres à entrada, os caracteres são substituídos conforme anexo. O que há de errado nisso?
- Qual é o significado de STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)?
http://a.imageshack.us/img8/606/resultqm.jpg
ADICIONADO
Após alguns testes, obtive a seguinte alteração para resolver o problema. Ou seja, o formato "\ e" deve ser substituído pelo formato "\ [\ e".
Vermelho = "\\ e [1; 31m" - não está funcionando Vermelho = "\ [\ e [1; 31m \]" - funcionando
\$
para alternar automaticamente entre as indicações raiz e não raiz.No manual do bash:
\[
e\]
não são passados para o terminal. Eles dizem ao bash que os caracteres entre eles não serão impressos. Sem eles, o bash não poderia saber que a sequência após o caractere de escape (e, g.[32;1m
) Não ocupa nenhum espaço na tela, o que explica por que não calculou corretamente a duração do prompt quando você os deixou de fora.Observe que você não foi muito consistente em sua pergunta (ou talvez seja apenas um erro com o Markdown); você precisa ter uma sequência literal de barra invertida
$PS1
, não apenas um suporte (que seria exibido literalmente).As seqüências de escape iniciadas com
\e
são interpretadas pelo emulador de terminal. Eles estão documentados no documento Xterm control sequences (ctlseqs) (outros emuladores de terminal tendem a ser principalmente compatíveis). Por exemplo,\e[32;1m
alterna para o primeiro plano em negrito e verde;\e[40m
muda a cor de fundo para preto;\e[0m
restaura os atributos padrão.fonte
A maioria dos emuladores de terminal modernos é capaz de usar códigos de escape ANSI para controlar vários aspectos da tela.
A maioria dos códigos ANSI começa com o código de 2 caracteres ESC- [Esse é o caractere de escape (ASCII decimal 27) seguido pelo caractere de colchete aberto. Essa sequência também é conhecida como CSI ou Control Sequence Initiator.
Como o caractere de escape não é aquele que você pode digitar diretamente (a tecla Esc tem outros usos, geralmente específicos do aplicativo), o bash usa '\ e' para fazer referência a ele.
A alteração da cor do texto usa o comando ANSI Set Graphics Mode:
onde
<value>
pode haver uma lista de valores separados por ponto e vírgula (;
). Normalmente, apenas um valor é usado, embora o atributo negrito seja útil em conjunto com os atributos de cores.Observando os valores listados na resposta de Alexander Pogrebnyak, o 0 ou 1 antes do ponto e vírgula seleciona negrito ou não:
Há uma lista útil dos códigos aqui http://ascii-table.com/ansi-escape-sequences.php
fonte