Bedeutung von \ [\ e] 0; in PS1 in .bashrc

9

Im .bashrc

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

Ich verstehe ${debian_chroot:+($debian_chroot)}\u@\h: \w, aber nicht \[\e]0;. Was macht das?

Lee
quelle

Antworten:

11

Das \e]0;ist eine Fluchtsequenz; \ewird durch ASCII 27 (ESC) ersetzt, sodass das Terminal die 4 Zeichen erhält, die ESC ] 0 ;xterm anweisen, das Symbol und die Titelleiste festzulegen, die mit BEL ( \a) enden .

Die Sequenz \e]0;STUFFGOESHERE\asetzt also den Titel des Terminals auf STUFFGOESHERE. In Ihrem Beispiel wird der Titel auf Benutzer / Host / Pfad gesetzt.

FWIW, xterm Escape-Sequenzen sind dokumentiert unter: https://www.x.org/docs/xterm/ctlseqs.pdf

Stephen Harris
quelle
1
TLDR; Diese Sequenz setzt die Titelleiste auf das Arbeitsverzeichnis.
David Refoua
6

Die Zeichen \e[0;in der Zeile

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

wird von der Schale (Gleichsetzen interpretiert , \eum \033das ASCII ESC Escape - Zeichen), beginnend eine Escape - Sequenz. Die Sequenz endet am \a(ebenfalls interpretiert durch die Shell \ 007` ASCII BEL Glocke ).

Dies 0ist ein Parameter (für einen sogenannten Betriebssystembefehl ), der das Terminal anweist, sowohl Symbol- als auch Fenstertitel zu ändern.

Technisch sollte es sein \e\\(ECMA-48), aber so hat es nicht angefangen. Als das Feature 1986 erstmals eingeführt wurde, wurde xtermder Titel des ersten nicht druckbaren Zeichens beendet. Das \awurde als String - Terminator von xterm seit X11R4 im Jahr 1989 anerkannt (wenn getrennte Parameter 1und 2wurden hinzugefügt , um das Symbol und Fenstertitel zu unterscheiden).

rxvtEinige Jahre später wurde dies aufgegriffen, und einige Jahre später wurde xterm so geändert, dass es auch einen Standard-String-Terminator akzeptiert. Im Änderungsprotokoll wurde kein besonderer Punkt erwähnt, aber es erschien ctlseqs.mszuerst im August 1996. Wenn andere Terminals die Funktion implementiert haben, akzeptieren sie im Allgemeinen \anur.

Ohne das Ende könnte das isolierte Escape-Zeichen terminalspezifisch als Fehler behandelt werden (einschließlich des vollständigen Ignorierens des Textes).

Weiterführende Literatur:

Thomas Dickey
quelle