Dove posso trovare un riferimento completo per la variabile $ PS1?


20

La variabile PS1 predefinita sul mio computer (Kubuntu 13.10) è questa:

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

Sto cercando un riferimento per come funziona la variabile $ PS1 che, come minimo, mi permette di capire la variabile PS1 sopra.


@ RaduRădeanu L'ho spostato in una risposta separata ora.
Mark Raymond,

Come nota generale, puoi giocare con questo impostando il valore di PS1in un terminale, ad es PS1="How r u, \u?". La modifica durerà solo fino alla chiusura del terminale.
djvg,

Risposte:


24

Riferimenti

Finora, non c'è stato un unico riferimento per tutto ciò che può andare in un prompt di Bash - ma poiché è una funzionalità che si è evoluta nel corso dei decenni e probabilmente varia da distro a distro, forse è troppo da chiedere. Ho cercato di riassumere ciò che ho trovato più utile qui.

Questo how-to è il più completo, ma è molto lungo e sconclusionato. Alcune delle sezioni più utili:

  • Le sezioni 2.4 e 2.5 spiegano le basi dell'impostazione di PS1, inclusi i caratteri di escape (stampabili).
  • La sezione 3.4 spiega perché \[e \]sono necessari.
  • La Sezione 6 spiega tutte le sequenze di escape principali (non stampabili) che potresti voler usare, inclusa l'impostazione del colore del prompt e il titolo di una finestra xterm.

Questa guida spiega come ${}funziona in Bash in generale, e questa domanda Ask Ubuntu spiega un po 'di più su come funziona debian_chroot.

Tra questi, penso che ogni personaggio nella variabile predefinita di Ubuntu PS1 sia spiegato.

Spiegazione del prompt di Ubuntu

Il prompt contiene tre parti:

  • \[\e]0;\u@\h: \w\a\] imposta la barra del titolo di una finestra xterm:

    • \[ avvia una sezione di caratteri non stampabili
    • \e]0; è la sequenza di escape per 'imposta il titolo xterm' (credo che numeri diversi da 0 imposteranno altre proprietà xterm, anche se non l'ho provato)
    • \u@\h: \wil titolo da usare (vedi sotto per \u, \he \w)
    • \a segna la fine del titolo
    • \] segna la fine dei caratteri non stampabili
  • ${debian_chroot:+($debian_chroot)}si espande al valore di $ debian_chroot tra parentesi se $ debian_chroot è impostato. Vedi questa domanda per maggiori informazioni su $ debian_chroot.
  • \u@\h:\w\$ è il prompt stesso:

    • \u si espande all'attuale nome utente
    • \h si espande all'attuale nome host
    • \w si espande nella directory di lavoro corrente
    • \$si espande in #per root e $per tutti gli altri utenti

6

Secondo il Manuale di riferimento di Bash , PS1è:

La stringa del prompt principale. Il valore predefinito è \s-\v\$. Vedere Controllo di un prompt , per visualizzare l'elenco completo delle sequenze di escape espanse prima della PS1visualizzazione.

Alcuni altri buoni riferimenti possono essere:


Il manuale di bash descrive completamente le sequenze di escape di PS1: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman

@Radu - Grazie, mi ha portato oltre di quanto non avessi mai fatto prima. Sembra che ci siano ancora poche informazioni su cosa può andare dentro \[e \], comunque - hai qualche riferimento per questo?
Mark Raymond,

@MarkRaymond È spiegato in due collegamenti che ti ho dato ( Stampa di un prompt e prompt PS1 spiegato per Linux / Unix ): \[- inizia una sequenza di caratteri non stampabili, che potrebbe essere usata per incorporare una sequenza di controllo terminale nel prompt; \]- termina una sequenza di caratteri non stampabili.
Prenditi il

Sì, l'ho letto: stavo cercando un riferimento a ciò che fanno quei personaggi non stampabili. Scusa se non sono stato chiaro!
Mark Raymond,

@MarkRaymond Personaggi non stampabili nei prompt .
Radu Rădeanu,

5

ss64.com sembra avere la migliore referenza che ho trovato.

Spiega le seguenti variabili:

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

La \[ ... \]definisce una serie di caratteri non stampabili. Sono tenuti a tenere traccia della posizione del cursore correttamente.

Il messaggio \enel prompt avvia una sequenza di escape. Altro su quelli qui (nota "Esc" in quella pagina è la \esequenza).

  • Nota: non mi sono mai piaciute le sequenze di escape. Utilizzare tputper ottenere il codice di escape per te.

${debian_chroot:+($debian_chroot)}è l'espansione dei parametri. Vedi qui

  • Scrive ($debian_chroot)se $debian_chrootè impostato altrimenti niente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.