¿Dónde puedo encontrar una referencia completa para la variable $ PS1?

20

La variable predeterminada de PS1 en mi máquina (Kubuntu 13.10) es esta:

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

Estoy buscando una referencia de cómo funciona la variable $ PS1 que, como mínimo, me permite comprender la variable PS1 anterior.

Mark Raymond
fuente
@ RaduRădeanu Lo he movido a una respuesta separada ahora.
Mark Raymond
Como nota general, puede jugar con esto estableciendo el valor de PS1en un terminal, por ejemplo PS1="How r u, \u?". El cambio solo durará hasta que cierre la terminal.
djvg
Relacionado: askubuntu.com/a/984073/301745
wjandrea

Respuestas:

24

Referencias

Hasta ahora, no ha habido una sola referencia para todo lo que puede ir en un aviso de Bash, pero como es una característica que ha evolucionado durante décadas y probablemente varía de una distribución a otra, tal vez sea demasiado pedir. He tratado de resumir lo que encontré más útil aquí.

Este tutorial es el más completo, pero es muy largo y divagante. Algunas de las secciones más útiles:

  • Las secciones 2.4 y 2.5 explican los conceptos básicos de la configuración de PS1, incluidos los caracteres de escape (imprimibles).
  • La sección 3.4 explica por qué \[y \]son necesarios.
  • La Sección 6 explica todas las secuencias de escape principales (no imprimibles) que puede utilizar, incluida la configuración del color de la solicitud y el título de una ventana xterm.

Esta guía explica cómo ${}funciona en Bash en general, y esta pregunta Ask Ubuntu explica un poco más sobre cómo funciona eso debian_chroot.

Entre ellos, creo que se explican todos los caracteres en la variable predeterminada de Ubuntu PS1.

Explicación de la solicitud de Ubuntu

Hay tres partes en la solicitud:

  • \[\e]0;\u@\h: \w\a\] establece la barra de título de una ventana xterm:

    • \[ comienza una sección de caracteres no imprimibles
    • \e]0; es la secuencia de escape para 'establecer título de xterm' (creo que los números que no sean 0 establecerán otras propiedades de xterm, aunque no he probado esto)
    • \u@\h: \wel título a usar (ver abajo para \u, \hy \w)
    • \a marca el final del título
    • \] marca el final de los caracteres no imprimibles
  • ${debian_chroot:+($debian_chroot)}se expande al valor de $ debian_chroot entre paréntesis si se establece $ debian_chroot. Consulte esta pregunta para obtener más información sobre $ debian_chroot.
  • \u@\h:\w\$ es el aviso en sí:

    • \u se expande al nombre de usuario actual
    • \h se expande al nombre de host actual
    • \w se expande al directorio de trabajo actual
    • \$se expande #para root y $para todos los demás usuarios
Mark Raymond
fuente
6

De acuerdo con el Manual de referencia de Bash , PS1es:

La cadena de solicitud principal. El valor por defecto es \s-\v\$. Consulte Control de una solicitud , para ver la lista completa de secuencias de escape que se expanden antes de que PS1se muestre.

Algunas otras buenas referencias pueden ser:

Radu Rădeanu
fuente
El manual de bash describe completamente las secuencias de escape de PS1: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman
@Radu - Gracias, eso me llevó más lejos de lo que había llegado antes. Todavía parece haber poca información sobre lo que puede entrar \[y \], sin embargo, ¿tiene alguna referencia para eso?
Mark Raymond el
@MarkRaymond Se explica en dos enlaces que le di ( Imprimiendo un aviso y un aviso de PS1 explicado para Linux / Unix ): \[- comience una secuencia de caracteres que no se imprimen, que podrían usarse para incrustar una secuencia de control de terminal en el aviso; \]- Finalizar una secuencia de caracteres que no se imprimen. Solo tómate tu tiempo y lee atentamente;)
Radu Rădeanu
Sí, lo leí. Estaba buscando una referencia de lo que hacen esos personajes que no se imprimen. Lo siento si no estaba claro!
Mark Raymond el
@MarkRaymond Caracteres no imprimibles en las indicaciones .
Radu Rădeanu
5

ss64.com parece tener la mejor referencia que he encontrado.

Explica las siguientes variables:

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

El \[ ... \]define una serie de caracteres que no se imprimen. Deben realizar un seguimiento correcto de la posición del cursor.

El \een su mensaje inicia una secuencia de escape. Más sobre ésos aquí (nota "Esc" en esa página es la \esecuencia).

  • Nota: nunca me han gustado las secuencias de escape. Use tputpara obtener el código de escape para usted.

${debian_chroot:+($debian_chroot)}es la expansión de parámetros. Ver aquí

  • Escribe ($debian_chroot)si $debian_chrootse establece de otra manera nada.
kiri
fuente