Titel der Terminal-Registerkarte nach der SSH-Sitzung

11

Unter Mac OS X (ich bin auf 10.6.8, obwohl ich glaube, dass andere Versionen identisch sind) ändert das Einfügen in einen Remotecomputer den Titel der aktuellen Registerkarte in Terminal. Ärgerlicherweise exitändert sich der Titel der Registerkarte nicht wieder in den ursprünglichen Zustand, wenn ich mich entweder explizit mit oder über eine Zeitüberschreitung von der Remote-Maschine trenne.

Fast täglich verursacht dies fast einen Herzinfarkt, wenn ich einen Befehl oder einen anderen Befehl tippe, nur um aus dem Augenwinkel zu sehen, dass die Registerkarte immer noch user @ remotehost heißt. Ich bin ein vorsichtiger Benutzer, der immer dazu neigt, pwdmeinen Standort zu bestätigen, bevor er etwas unternimmt. Dennoch gerät er in Panik, wenn ich dies tue, DROP DATABASE xund ich sehe den Namen des Remote-Hosts auf der Registerkarte.

Kurz gesagt, gibt es eine Möglichkeit, diesen Titel beim Trennen von einem Remote-Host zurückzusetzen, oder muss ich bei jedem Trennen einen neuen Tab öffnen, um den Titel zurückzusetzen?

Peter O'Callaghan
quelle
Terminal-Namen werden auch zurückgesetzt, wenn Sie beendennpm
Awesome_girl

Antworten:

20

Fügen Sie ein PROMPT_COMMANDzu Ihrem hinzu .bash_profile

export PROMPT_COMMAND="echo -ne '\033]0;${USER}@${HOSTNAME}\007';$PROMPT_COMMAND"

Das PROMPT_COMMANDwird jedes Mal ausgeführt, wenn die Eingabeaufforderung angezeigt wird.

Bitte beachten Sie, dass wir die vorhandene PROMPT_COMMANDUmgebungsvariable einbeziehen, damit wir keine vorhandenen Einstellungen (dh update_terminal_cwd) verlieren .

s01ipsist
quelle
2
Stellen Sie sicher, dass Sie Ihren Code zu PROMPT_COMMAND hinzufügen , anstatt ihn zu ersetzen, z PROMPT_COMMAND="<your code>; $PROMPT_COMMAND". Andernfalls deaktivieren Sie andere Funktionen, die diese Variable verwenden. Beispielsweise legt / etc / bashrc damit das aktuelle Arbeitsverzeichnis des Terminals fest, damit das Terminal es anzeigen und für verschiedene Vorgänge verwenden kann.
Chris Page
@ChrisPage Muss der neue Code vorher kommen, $PROMPT_COMMANDdamit die anderen Funktionen erhalten bleiben?
reve_etrange
Warum nicht direkt in PS1?
Yongwei Wu
Bearbeiten Sie das so .bash_profile? sublime $HOME/.bash_profile?
Awesome_girl
@Awesome_girl Stellen Sie sicher, dass der sublBefehl installiert ist, und bearbeiten Sie die Datei von Ihrem Terminal aus mit subl ~/.bash_profile. Wenn dieser Befehl nicht vorhanden ist, gehen Sie folgendermaßen vor: sublimetext.com/docs/2/osx_command_line.html
XtraSimplicity
1

Folgendes müssen Sie in Ihre .bash_profileDatei einfügen . Dies ist weitaus sauberer und entspricht dem Ansatz von Apple, wenn Ihr aktuelles Arbeitsverzeichnis aktualisiert wird. Die Prüfung für die Variable update_term_titleist bereits vorhanden, ist nicht wirklich notwendig (wie niemand anruft bash -- login), sondern nur als Wache vorhanden.

if [ -z "$INSIDE_EMACS" ]; then
    # Update the terminal title on every prompt shown
    update_term_title() {
        # Print user@short-hostname once SSH quits.
        echo -ne "\033]0;${USER}@${HOSTNAME%%.*}\007"
        # Or ${HOSTNAME} if short host names aren't your taste
        # Or echo -ne "\033]0;\007" if you don't want anything.
    }
    # Check to see if update terminal title is present?
    if ! echo $PROMPT_COMMAND | grep -q update_term_title
    then
       # This function is not found in PROMPT_COMMAND, add it
       PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }update_term_title"
    fi
fi
zapstar
quelle
1
Lol, ich habe mich gefragt, wer diese Antwort geschrieben hat ... es stellte sich heraus, dass ich es war :-)
zapstar