No Stackoverflow, acabei de ver uma dúvida sobre a PS1
variável de ambiente, responsável pelo prompt do terminal Linux.
Meu prompt se parece com o seguinte:
username@PORT-usr:/dir
username
é o nome de usuário que uso ao fazer login no meu WSL.PORT-usr
é o nome do meu laptop./dir
é o meu diretório atual.
Minha PS1
variável de ambiente é a seguinte:
Prompt>echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Tentar executar isso não funciona:
Prompt>echo $($PS1)
\[\e]0;\u@\h:: command not found
Prompt>echo echo $(\[\e]0;\u@\h: \w\a\]${debian_chroot...)
e]0: command not found
u@h:: command not found
32m]u@h[033[00m]:[033[01: command not found
34m]w[033[00m]$: command not found
Qual é a sintaxe da $PS1
variável usada e qual comando posso usar para aprender a entender essa sintaxe?
A
PS1
variável shell (que pode ou não ser também uma variável de ambiente) não contém um comando shell regular. Ele é expandido em um prompt usando um procedimento especial específico para a variedade de shell que você está usando. É provável que inclua sequências especiais que não são reconhecidas peloecho
comando simples.Seu prompt de shell se parece com o padrão para Debian (e possivelmente distribuições relacionadas). O shell padrão do Debian para contas de usuários regulares é
bash
, então você deve consultar oPROMPTING
capítulo deman bash
, ou o capítulo 6.9: Controlando o Prompt do Manual de Referência do Bash.Para entender qualquer código de controle de terminal incorporado, você também pode consultar a documentação apropriada para seu emulador de terminal, como a referência de sequências de controle Xterm .
Veja como seu prompt atual será interpretado:
Se o
\[
...\]
encapsulamento de caracteres não imprimíveis não for feito corretamente, você verá erros na quebra de linha quando a linha de comando ficar maior que a largura do seu terminal.A sintaxe de
PS1
é uma linguagem própria e não pode ser apenasecho
impressa.Para entendê-lo, sua única opção é acessar a documentação do shell: https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html