Où puis-je trouver une référence complète pour la variable $ PS1?

20

La variable PS1 par défaut sur ma machine (Kubuntu 13.10) est la suivante:

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

Je cherche une référence sur le fonctionnement de la variable $ PS1 qui, au minimum, me permet de comprendre la variable PS1 ci-dessus.

Mark Raymond
la source
@ RaduRădeanu Je l'ai déplacé vers une réponse distincte maintenant.
Mark Raymond
En règle générale, vous pouvez jouer avec cela en définissant la valeur de PS1dans un terminal, par exemple PS1="How r u, \u?". Le changement ne durera que jusqu'à la fermeture du terminal.
djvg
En relation: askubuntu.com/a/984073/301745
wjandrea

Réponses:

24

Les références

Jusqu'à présent, il n'y a pas eu une seule référence pour tout ce qui peut aller dans une invite Bash - mais comme c'est une fonctionnalité qui a évolué au fil des décennies et qui varie probablement d'une distribution à l'autre, c'est peut-être trop demander. J'ai essayé de résumer ce que j'ai trouvé le plus utile ici.

Ce mode d'emploi est le plus complet, mais il est très long et décousu. Certaines des sections les plus utiles:

  • Les sections 2.4 et 2.5 expliquent les bases de la configuration de PS1, y compris les caractères d'échappement (imprimables).
  • La section 3.4 explique pourquoi \[et \]est nécessaire.
  • La section 6 explique toutes les séquences d'échappement principales (non imprimables) que vous voudrez peut-être utiliser, y compris la définition de la couleur de l'invite et le titre d'une fenêtre xterm.

Ce guide explique comment ${}fonctionne Bash en général, et cette question Ask Ubuntu explique un peu plus comment cela fonctionne debian_chroot.

Entre ceux-ci, je pense que chaque personnage de la variable Ubuntu PS1 par défaut est expliqué.

Explication de l'invite Ubuntu

L'invite comprend trois parties:

  • \[\e]0;\u@\h: \w\a\] définit la barre de titre d'une fenêtre xterm:

    • \[ démarre une section de caractères non imprimables
    • \e]0; est la séquence d'échappement pour 'set xterm title' (je crois que des nombres autres que 0 définiront d'autres propriétés xterm, même si je n'ai pas testé cela)
    • \u@\h: \wle titre à utiliser (voir ci-dessous pour \u, \het \w)
    • \a marque la fin du titre
    • \] marque la fin des caractères non imprimables
  • ${debian_chroot:+($debian_chroot)}se développe à la valeur de $ debian_chroot entre parenthèses si $ debian_chroot est défini. Voir cette question pour plus d'informations sur $ debian_chroot.
  • \u@\h:\w\$ est l'invite elle-même:

    • \u s'étend au nom d'utilisateur actuel
    • \h s'étend au nom d'hôte actuel
    • \w se développe dans le répertoire de travail actuel
    • \$se développe #pour root et $pour tous les autres utilisateurs
Mark Raymond
la source
6

Selon Bash Reference Manual , PS1c'est:

La chaîne d'invite principale. La valeur par défaut est \s-\v\$. Voir Contrôle d'une invite , pour la liste complète des séquences d'échappement développées avant PS1s'affiche.

Quelques autres bonnes références peuvent être:

Radu Rădeanu
la source
Le manuel bash décrit complètement les séquences d'échappement PS1: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman
@Radu - Merci, cela m'a permis d'aller plus loin qu'auparavant. Il semble toujours y avoir peu d'informations sur ce qui peut y entrer \[et \], cependant - avez-vous des références à ce sujet?
Mark Raymond
@MarkRaymond Il est expliqué dans deux liens que je vous ai donnés ( Impression d'une invite et invite PS1 expliquée pour Linux / Unix ): \[- commencez une séquence de caractères non imprimables, qui pourrait être utilisée pour incorporer une séquence de contrôle de terminal dans l'invite; \]- terminer une séquence de caractères non imprimables. Prenez votre temps et lisez attentivement;)
Radu Rădeanu
Oui, je l'ai lu - je cherchais une référence de ce que font ces caractères non imprimables. Désolé si je n'ai pas été clair!
Mark Raymond
@MarkRaymond Caractères non imprimables dans les invites .
Radu Rădeanu
5

ss64.com semble avoir la meilleure référence que j'ai trouvée.

Il explique les variables suivantes:

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

Le \[ ... \]définit une série de caractères non imprimables. Ils sont nécessaires pour suivre correctement la position du curseur.

Dans \evotre invite, une séquence d'échappement démarre. Plus d'informations sur celles-ci ici (notez "Esc" sur cette page est la \eséquence).

  • Remarque: je n'ai jamais vraiment aimé les séquences d'échappement. Utilisez tputpour obtenir le code d'échappement pour vous.

${debian_chroot:+($debian_chroot)}est l'expansion des paramètres. Voir ici

  • Il écrit ($debian_chroot)si $debian_chrootest défini sinon rien.
kiri
la source