Ich möchte nicht, dass lange Verzeichnispfade den Platz auf meinem Terminal beanspruchen, also kürze ich sie mit einem Python-Skript. Ich habe die .bashrc-Datei bearbeitet und PS1 durch
export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.
Und wenn ich das mache, funktioniert der Titel des Terminals nicht mehr. Es wird einfach Folgendes angezeigt Terminal
. Das ist ärgerlich. Ich kann den Titel manuell ändern, indem ich den folgenden Befehl in Bash ausführe:
PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'
Gibt es eine Möglichkeit, den Titel des Terminals auf die benutzerdefinierte Eingabeaufforderung festzulegen, die in meiner Bash festgelegt wird?
Antwort1
Für das Gnome-Terminal wird der Terminaltitel über festgelegt, PROMPT_COMMAND
der in definiert ist /etc/profile.d/vte-2.91.sh
.
PROMPT_COMMAND
, wie in diesem Skript definiert, bewirkt zwei Dinge:
ändert den Terminaltitel mit der OSC 0-Escape-Sequenz (
\033]0;NEW_TITLE\007
),ändert die Vorstellung des Terminals vom aktuellen Verzeichnis mithilfe der OSC 7-Escapesequenz (
\033]7;NEW_CURRENT_DIRECTORY\007
, dies wird in die Funktion ausgegliedert__vte_osc7
).
Sollten Sie das zweite aus Ihrem entfernen PROMPT_COMMAND
, würden Ihre neu geöffneten Terminalfenster oder -tabs nicht in dem Verzeichnis geöffnet, in dem Sie sich im vorherigen Terminal befanden. Dies möchten Sie höchstwahrscheinlich nicht.
vte-2.91.sh
Daher müssen Sie in Ihren Shell-Startskripten nach der Beschaffung Ihr bevorzugtes Skript erstellen PROMPT_COMMAND
, das den Titel auf ähnliche Weise wie festlegt vte-2.91.sh
und das aktuelle Arbeitsverzeichnis genau wie standardmäßig einstellt.
Mir ist keine Möglichkeit bekannt, auf PS1
den aufgelösten Wert von (d. h. nach dem Ersetzen des Benutzernamens usw.) innerhalb PROMPT_COMMAND
oder an anderer Stelle zu verweisen (geschweige denn die Escape-Sequenzen wie Farbänderungen herauszufiltern). Wenn Sie in Ihrer Eingabeaufforderung und im Fenstertitel dieselbe Zeichenfolge sehen möchten, müssen Sie meiner Meinung nach die Konstruktion dieser Zeichenfolge für PS1
und duplizieren PROMPT_COMMAND
.
Antwort2
Das wird für Sie funktionieren
Öffnen Sie ~/.bashrc
. Suchen Sie die Zeile mit dem Inhalt:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Kommentieren Sie diese Zeile aus, indem Sie #
davor ein Zeichen setzen:
# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Fügen Sie nun diese Zeile hinzu (möglicherweise möchten Sie sie direkt nach der auskommentierten Zeile einfügen):
PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'
ErsetzenCustom Name
mit dem, was auch immer Sie als Terminaltitel ändern möchten.
Hoffe das hilft.
Antwort3
Die zu verwendende Escape-Sequenz istESC]2;neuer TitelBELWoESCUndBELsind die Escape- und Glockenzeichen. Wie \[\e]2;NEWTITLE\a\]
. Mit #Bash-Escape-Sequenzen sieht das Ändern des Titels in Ihrer Eingabeaufforderung folgendermaßen aus:
export PS1='\[\e]2;new title\a\]prompt > '
Dokumentreferenz
Ein Beispiel für eine mehrfarbige, gekürzte Bash-Eingabeaufforderung mit benutzerdefiniertem Terminaltitel ist:
export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'
In diesem Beispiel spiegelt der Terminaltitel immer das aktuelle Arbeitsverzeichnis ( $PWD
) wider und die Terminaleingabeaufforderung sieht immer wie folgt aus, unabhängig davon, in welchem Verzeichnis Sie sich befinden: user@hostname $
.
Sie können es $PWD
durch ersetzen CUSTOM TITLE
, damit der Terminaltitel immer widerspiegelt CUSTOM TITLE
.
Aktualisieren
Seien Sie vorsichtig, wenn Sie nicht gedruckte Zeichen nicht in \[
und einschließen \]
. Es funktioniert auch ohne und ich mache es schon seit Jahren ohne. Wie ich jedoch heute bei einigen Setups herausgefunden habe,kann einige Probleme verursachenim Terminal. Unten sehen Sie eine sauberere Version mit Variablen und Farbcodes:
T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"