Wo finde ich eine vollständige Referenz für die Variable $ PS1?

20

Die Standard-PS1-Variable auf meinem Computer (Kubuntu 13.10) lautet wie folgt:

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

Ich suche nach einer Referenz für die Funktionsweise der Variablen $ PS1, die es mir zumindest ermöglicht, die obige PS1-Variable zu verstehen.

Mark Raymond
quelle
@ RaduRădeanu Ich habe es jetzt auf eine separate Antwort verschoben.
Mark Raymond
Im Allgemeinen können Sie damit herumspielen, indem Sie den Wert PS1in einem Terminal einstellen , z PS1="How r u, \u?". Die Änderung bleibt nur so lange bestehen, bis Sie das Terminal schließen.
DJVG
Siehe auch
wjandrea

Antworten:

23

Verweise

Bisher gab es nicht eine einzige Referenz für alles, was in einer Bash-Eingabeaufforderung enthalten sein kann - aber da es sich um eine Funktion handelt, die sich über Jahrzehnte entwickelt hat und wahrscheinlich von Distribution zu Distribution variiert, ist dies möglicherweise zu viel verlangt. Ich habe versucht zusammenzufassen, was ich hier am nützlichsten fand.

Dieses How-to ist das vollständigste, aber es ist sehr lang und weitläufig. Einige der nützlicheren Abschnitte:

  • In den Abschnitten 2.4 und 2.5 werden die Grundlagen der Einstellung von PS1 einschließlich der (druckbaren) Escape-Zeichen erläutert.
  • Abschnitt 3.4 erklärt warum \[und \]notwendig.
  • In Abschnitt 6 werden alle wichtigen (nicht druckbaren) Escape-Sequenzen erläutert, die Sie möglicherweise verwenden möchten, einschließlich der Einstellung der Farbe der Eingabeaufforderung und des Titels eines xterm-Fensters.

In diesem Handbuch wird die ${}allgemeine Funktionsweise von Bash erläutert. In dieser Frage zu Ask Ubuntu erfahren Sie etwas mehr darüber, wie dies funktioniert debian_chroot.

Dazwischen wird meines Erachtens jedes Zeichen in der Standardvariablen von Ubuntu PS1 erklärt.

Erklärung der Ubuntu-Eingabeaufforderung

Die Eingabeaufforderung besteht aus drei Teilen:

  • \[\e]0;\u@\h: \w\a\] Setzt die Titelleiste eines XTerm-Fensters:

    • \[ Startet einen Abschnitt mit nicht druckbaren Zeichen
    • \e]0; ist die Escape-Sequenz für 'set xterm title' (Ich glaube, Zahlen ungleich 0 setzen andere xterm-Eigenschaften, obwohl ich dies nicht getestet habe)
    • \u@\h: \wden zu verwendenden Titel (siehe unten für \u, \hund \w)
    • \a markiert das Ende des Titels
    • \] markiert das Ende nicht druckbarer Zeichen
  • ${debian_chroot:+($debian_chroot)}Wird auf den Wert von $ debian_chroot in Klammern erweitert, wenn $ debian_chroot gesetzt ist. Weitere Informationen zu $ ​​debian_chroot finden Sie in dieser Frage .
  • \u@\h:\w\$ ist die Eingabeaufforderung selbst:

    • \u wird auf den aktuellen Benutzernamen erweitert
    • \h wird auf den aktuellen Hostnamen erweitert
    • \w wird zum aktuellen Arbeitsverzeichnis erweitert
    • \$erweitert #für root und $für alle anderen Benutzer
Mark Raymond
quelle
6

Laut mit Bash - Referenzhandbuch , PS1ist:

Die primäre Eingabeaufforderungszeichenfolge. Der Standardwert ist \s-\v\$. Eine vollständige Liste der zuvor erweiterten Escape-Sequenzen finden Sie unter Steuern einer EingabeaufforderungPS1 .

Einige andere gute Referenzen können sein:

Radu Rădeanu
quelle
Das Bash-Handbuch beschreibt die PS1-Escape-Sequenzen vollständig: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
Glenn Jackman
@Radu - Danke, das bringt mich weiter als je zuvor. Es scheint immer noch wenig Informationen darüber zu geben, was hinein gehen kann, \[und \]- haben Sie irgendwelche Referenzen dafür?
Mark Raymond
@MarkRaymond Es wird in zwei Links erklärt, die ich Ihnen gegeben habe ( Drucken einer Eingabeaufforderung und PS1-Eingabeaufforderung, erklärt für Linux / Unix ): \[- Beginnen Sie eine Sequenz von nicht druckbaren Zeichen, die zum Einbetten einer Terminalsteuerungssequenz in die Eingabeaufforderung verwendet werden kann. \]- Eine Folge von nicht druckbaren Zeichen beenden. Nehmen Sie sich Zeit und lesen Sie sorgfältig;)
Radu Rădeanu
Ja, ich habe das gelesen - ich habe nach einer Referenz gesucht, was diese nicht druckbaren Zeichen tun. Tut mir leid, wenn ich nicht klar war!
Mark Raymond
@ MarkRaymond Nicht druckende Zeichen in Eingabeaufforderungen .
Radu Rădeanu
5

ss64.com scheint die beste Referenz zu haben, die ich gefunden habe.

Es erklärt die folgenden Variablen:

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

Das \[ ... \] definiert eine Reihe von nicht druckbaren Zeichen. Sie sind erforderlich, um die Cursorposition korrekt zu verfolgen.

Das \ein Ihrer Eingabeaufforderung startet eine Escape-Sequenz. Mehr dazu hier (Anmerkung "Esc" auf dieser Seite ist die\e Sequenz).

  • Hinweis: Ich habe Escape-Sequenzen noch nie wirklich gemocht. Verwendentput , um den Escape-Code für Sie abzurufen.

${debian_chroot:+($debian_chroot)}ist Parametererweiterung. Sehen hier

  • Es schreibt ($debian_chroot)wenn $debian_chrootsonst nichts eingestellt ist.
kiri
quelle