Stellen Sie sicher, dass die tmux-Fensternamen Bash $PS1 verwenden

Stellen Sie sicher, dass die tmux-Fensternamen Bash $PS1 verwenden

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 /homenicht bashwie {pane_current_command}Drucke). Ich habe keine Ahnung, wie das geht, also versuche ich stattdessen herauszufinden, wie ich den Namen mit dem PS1des 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'

  1. Gibt es eine Möglichkeit, ein Tmux-Fenster nach dem zuletzt ausgeführten Befehl zu benennen?

  2. 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 tmuxeinen dynamischen Fenstertitel anzuzeigen, ändern Sie Ihren ~/.bashrcTitel 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.confFolgendes:

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_COMMANDist 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.

$TERMist 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 $PS1Wesentlichen doppelt gedruckt wird, wenn ich nicht in tmux bin.

Das dynamic_titlemuss in einfachen Anführungszeichen stehen, sonst wird es definiert, wenn Sie Ihr als Quelle verwenden ~/.bashrcund 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 evaltut, 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.

verwandte Informationen