
Unter Windows wird tmux
über MobaXterm eine Verbindung zu 1.8 auf CentOS 7 hergestellt.
Idealerweise möchte ich, dass meine tmux-Fenster den Namen des letzten Befehls haben, den ich in dem aktiven Fenster eingegeben habe (wie, cd /home
nicht bash
wie {pane_current_command}
Drucke). Ich habe keine Ahnung, wie das geht, also versuche ich stattdessen herauszufinden, wie ich den Namen mit dem PS1
des aktiven Fensters abgleichen kann. Ich habe versuchtdie Vorschläge in dieser Antwortmit diesem in meiner Bashrc:
settitle() {
printf "\033k$1\033\\"
}
basic_prompt='${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}'
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi; settitle($basic_prompt)'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '
und bekam
bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'
Gibt es eine Möglichkeit, ein Tmux-Fenster nach dem zuletzt ausgeführten Befehl zu benennen?
Wenn nicht, wie kann ich es richtig auf meinen einstellen
PS1
, der dynamisch auf meinem Benutzernamen und Pfad basiert?
Antwort1
Gelöst für tmux 2.6 und tmux 1.8 (auf beiden getestet).
Um tmux
einen dynamischen Fenstertitel anzuzeigen, ändern Sie Ihren ~/.bashrc
Titel etwa wie folgt:
settitle() {
printf "\033k$1\033\\"
}
dynamic_window_title='${USER:0:3}@${PWD:${#PWD}<25?0:(-25)}'
PROMPT_COMMAND='if [ "$TERM" =~ "screen" ]; then eval prompt=$dynamic_window_title; settitle "$prompt"; fi;'
Und Sie benötigen (wahrscheinlich) ~/.tmux.conf
Folgendes:
setw -g automatic-rename on
So wie ich es verstehe, settitle()
wird Ihr Fenster grundsätzlich nach jedem ausgeführten Befehl umbenannt. Ich verstehe nicht ganz, wie das funktioniert.
PROMPT_COMMAND
ist ein Teil von Bash, der nach jedem ausgeführten Befehl ausgeführt wird, was Ihnen coole Dinge ermöglicht wieVerfolgen, wie viele korrekte Bash-Befehle Sie hintereinander eingegeben haben, zusätzlich zu unserer Verwendung hier, unseren Titel ständig neu zu definieren.
$TERM
ist eine Umgebungsvariable, die bei mir entweder auf „screen“ (oder etwas wie „screen-256color“) gesetzt ist, wenn ich in tmux bin, oder auf „xterm“, wenn ich MobaXterm verwende. Wir prüfen dies, weil Ihr sonst im $PS1
Wesentlichen doppelt gedruckt wird, wenn ich nicht in tmux bin.
Das dynamic_title
muss in einfachen Anführungszeichen stehen, sonst wird es definiert, wenn Sie Ihr als Quelle verwenden ~/.bashrc
und ist nicht dynamisch. Sie müssen es jedoch irgendwann definieren, sonst wird Ihr Fenster buchstäblich umbenannt ${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}
. Dies ist, was es eval
tut, indem es eine Zeichenfolge erstellt, die buchstäblich dem gewünschten Fenstertitel entspricht. Dann geben wir diese Zeichenfolge einfach an settitle()
, in doppelte Anführungszeichen eingeschlossen, damit Leerzeichen richtig funktionieren.