Wie ändere ich die Bash-Eingabeaufforderung im Gnome-Terminal, ohne den Terminaltitel in Ubuntu 16 durcheinander zu bringen?

Wie ändere ich die Bash-Eingabeaufforderung im Gnome-Terminal, ohne den Terminaltitel in Ubuntu 16 durcheinander zu bringen?

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_COMMANDder 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.shDaher 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.shund das aktuelle Arbeitsverzeichnis genau wie standardmäßig einstellt.

Mir ist keine Möglichkeit bekannt, auf PS1den aufgelösten Wert von (d. h. nach dem Ersetzen des Benutzernamens usw.) innerhalb PROMPT_COMMANDoder 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 PS1und 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 Namemit 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 $PWDdurch 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}"

verwandte Informationen