im Moment verwende ich einen einzeiligen Perl-Code, um die Titel meiner Terminalleisten zu ändern,
print("\e]0;@ARGV\7");
aber jedes Mal, wenn ich per SSH auf einen anderen Remote-Rechner zugreife, wird der Titel vom Host geändert (was mich nicht besonders stört). Aber nachdem ich die Verbindung beende, bleibt der geänderte Titel bestehen. Gibt es eine Möglichkeit, das zu beheben? Im Wesentlichen möchte ich einen festen Titel für meine Terminals, wenn ich lokal arbeite.
Ich verwende hauptsächlich das XFCE-Terminal und den Terminator unter CentOS oder Debian. Danke.
BEARBEITEN
Eine weitere Feinheit besteht darin, dass ich, anstatt allen Terminals denselben Namen zu geben, lieber die Freiheit hätte, ihre Titel spontan zu bearbeiten, aber nur verbieten möchte, dass eine SSH-Sitzung meine Änderungen ändert.
Antwort1
Lösung: Fügen Sie einige Funktionen ~/.bashrc hinzu, um etwas zu tunnachssh- und su-Befehle
function title()
{
# change the title of the current window or tab
echo -ne "\033]0;$*\007"
}
function ssh()
{
/usr/bin/ssh "$@"
# revert the window title after the ssh command
title $USER@$HOST
}
function su()
{
/bin/su "$@"
# revert the window title after the su command
title $USER@$HOST
}
Hinweis: Starten Sie Bash nach Änderungen an ~/.bashrc neu.
Beispiel:
# title is "user1@boxA"
ssh boxB # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()
Hoffentlich hilft das.
Antwort2
Ich weiß nichts über Fenstertitel, aber ich habe versucht, mein System dazu zu bringen, beim Beenden einer SSH-Sitzung etwas zu tun – genauer gesagt, nachdem eine SSH-Sitzung beendet wurde. Kurz gesagt: So funktioniert es nicht. Im Grunde haben Sie drei Möglichkeiten:
Schreiben Sie einen Wrapper um ssh, d. h. ein ausführbares Shell-Skript mit dem Namen
ssh
, das Vorrang/usr/bin/ssh
vor $PATH hat, das die Zeileexec /usr/bin/ssh $@
irgendwo in der Mitte enthält. Auf diese Weise können Sie Ihre Shell vor und nach der Ausführung der effektiven ssh-Binärdatei einige Dinge tun lassen, während der Overhead auf ein Minimum beschränkt bleibt.Schreiben Sie einen Patch für die SSH-Quellen Ihrer Wahl, um einen Bereinigungs-Hook bereitzustellen, der einen über die Befehlszeile oder eine Konfigurationseinstellung übergebenen Shell-Befehl ausführt. Das ist, was wir wollen.
Habe
PROMPT_COMMAND
die Ausgabe von ausgewertethistory
. Im Grunde ein allgemeinerer und hässlicherer Ansatz als 1.
Antwort3
Konfigurieren Sie Ihre lokale Shell-Dotfile (z. B. $PROMPT_COMMAND
in ~/.bashrc
), um den Terminaltitel mit demselben Mechanismus entsprechend festzulegen.
Zum Beispiel:
export PROMPT_COMMAND="printf '\e]0;bash\7\n'"
Antwort4
Andere Antworten würden bei mir nicht funktionieren, wenn ich SSH beende, aber ich bin nah dran. Das Hinzufügen von setw automatic-rename funktioniert, wenn ich eine Remote-SSH-Sitzung beende, sodass sie automatisch umbenannt wird und ich das Fenster zum Zurücksetzen nicht mehr verlassen muss. [Jan. 2018 – Debian 9]
ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}