Onde posso encontrar uma referência completa para a variável $ PS1?

20

A variável PS1 padrão na minha máquina (Kubuntu 13.10) é a seguinte:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Estou procurando uma referência de como a variável $ PS1 funciona que, no mínimo, permita-me entender a variável PS1 acima.

Mark Raymond
fonte
@ RaduRădeanu Mudei para uma resposta separada agora.
Mark Raymond
Como nota geral, você pode brincar com isso definindo o valor de PS1em um terminal, por exemplo PS1="How r u, \u?". A alteração só durará até você fechar o terminal.
djvg
Relacionados: askubuntu.com/a/984073/301745
wjandrea

Respostas:

24

Referências

Até o momento, não houve uma única referência para tudo o que pode aparecer em um prompt do Bash - mas como é um recurso que evoluiu ao longo de décadas e provavelmente varia de uma distribuição para outra, talvez seja pedir demais. Tentei resumir o que achei mais útil aqui.

Este guia é o mais completo, mas é muito longo e divagante. Algumas das seções mais úteis:

  • As seções 2.4 e 2.5 explicam os conceitos básicos da configuração do PS1, incluindo os caracteres de escape (imprimíveis).
  • A Seção 3.4 explica por que \[e \]é necessária.
  • A Seção 6 explica todas as principais seqüências de escape (não imprimíveis) que você pode querer usar, incluindo a configuração da cor do prompt e do título de uma janela xterm.

Este guia explica como ${}funciona o Bash em geral, e esta pergunta Ask Ubuntu explica um pouco mais sobre como isso funciona debian_chroot.

Entre esses, acho que todos os personagens da variável padrão do Ubuntu PS1 são explicados.

Explicação do prompt do Ubuntu

Existem três partes no prompt:

  • \[\e]0;\u@\h: \w\a\] define a barra de título de uma janela xterm:

    • \[ inicia uma seção de caracteres não imprimíveis
    • \e]0; é a sequência de escape para 'set xterm title' (acredito que números diferentes de 0 definirão outras propriedades xterm, embora eu não tenha testado isso)
    • \u@\h: \wa título de uso (ver abaixo para \u, \he \w)
    • \a marca o final do título
    • \] marca o final de caracteres não imprimíveis
  • ${debian_chroot:+($debian_chroot)}expande para o valor de $ debian_chroot entre parênteses se $ debian_chroot estiver definido. Veja esta pergunta para mais informações sobre $ debian_chroot.
  • \u@\h:\w\$ é o próprio prompt:

    • \u expande para o nome de usuário atual
    • \h expande para o nome do host atual
    • \w expande para o diretório de trabalho atual
    • \$expande #para raiz e $para todos os outros usuários
Mark Raymond
fonte
6

De acordo com o Manual de Referência do Bash , PS1é:

A sequência de prompt principal. O valor padrão é \s-\v\$. Consulte Controlando um Prompt , para obter a lista completa de seqüências de escape que foram expandidas antes da PS1exibição.

Algumas outras boas referências podem ser:

Radu Rădeanu
fonte
O manual do bash descreve as seqüências PS1 fuga totalmente: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman
@ Radu - Obrigado, isso me levou mais longe do que antes. Ainda parece haver pouca informação sobre o que pode acontecer por dentro \[e \], no entanto - você tem alguma referência a isso?
Mark Raymond
@ MarkRaymond É explicado nos dois links que forneci ( Impressão de um prompt e prompt do PS1 explicado para Linux / Unix ): \[- inicie uma sequência de caracteres não imprimíveis, que podem ser usados ​​para incorporar uma sequência de controle de terminal no prompt; \]- finalize uma sequência de caracteres não imprimíveis. Basta levar o seu tempo e ler atentamente;)
Radu Rădeanu
Sim, eu li isso - estava procurando uma referência do que esses caracteres não imprimíveis fazem. Desculpe se eu não estava claro!
Mark Raymond
@MarkRaymond Caracteres não imprimíveis nos prompts .
Radu Rădeanu 13/01
5

ss64.com parece ter a melhor referência que eu encontrei.

Explica as seguintes variáveis:

\d   The date, in "Weekday Month Date" format (e.g., "Tue May 26"). 

\h   The hostname, up to the first . (e.g. deckard) 
\H   The hostname. (e.g. deckard.SS64.com)

\j   The number of jobs currently managed by the shell. 

\l   The basename of the shell's terminal device name. 

\s   The name of the shell, the basename of $0 (the portion following 
    the final slash). 

\t   The time, in 24-hour HH:MM:SS format. 
\T   The time, in 12-hour HH:MM:SS format. 
\@   The time, in 12-hour am/pm format. 

\u   The username of the current user. 

\v   The version of Bash (e.g., 2.00) 

\V   The release of Bash, version + patchlevel (e.g., 2.00.0) 

\w   The current working directory. 
\W   The basename of $PWD. 

\!   The history number of this command. 
\#   The command number of this command. 

\$   If you are not root, inserts a "$"; if you are root, you get a "#"  (root uid = 0) 

\nnn   The character whose ASCII code is the octal value nnn. 

\n   A newline. 
\r   A carriage return. 
\e   An escape character. 
\a   A bell character.
\\   A backslash. 

\[   Begin a sequence of non-printing characters. (like color escape sequences). This
     allows bash to calculate word wrapping correctly.

\]   End a sequence of non-printing characters.

O \[ ... \]define uma série de caracteres não imprimíveis. Eles são necessários para acompanhar a posição do cursor corretamente.

O \eprompt inicia uma sequência de escape. Mais sobre isso aqui (observe "Esc" nessa página é a \esequência).

  • Nota: nunca gostei muito de sequências de escape. Use tputpara obter o código de escape para você.

${debian_chroot:+($debian_chroot)}é expansão de parâmetro. Veja aqui

  • Ele escreve ($debian_chroot)se $debian_chrootestá definido caso contrário nada.
kiri
fonte