将 tmux 窗口名称重命名为 prompt_command、ps1 或远程 ssh 主机名?

use*_*782 26 tmux

我希望能够将我的 tmux 窗口标题自动重命名为 prompt_command、ps1 或只是我ssh想要的机器的主机名。打开 9 个标有“ssh”的窗口真的没用。做系统管理员工作时,我打开新屏幕并通过 ssh 来手动重命名它们。

我注意到的一件事是tmux更新xterm窗口标题,所以我觉得它必须知道。

有什么帮助吗?screen如果我能得到这个功能,我什至愿意回去。

Uta*_*ead 40

tmux rename-window -t${TMUX_PANE} "Title Text"

这是在窗口中设置 tmux 标题的正确方法。$TMUX_PANE 变量由 tmux 设置,用于区分不同的窗格。

  • @Christopher 如果您正在运行,例如“睡眠 3”并切换窗口,则提示会在睡眠完成时向错误的窗口发出命令。(这就是我来这里的原因,+1)。 (10认同)
  • 因为它是活动窗口,所以我不认为 `-t${TMUX_PANE}` 是必要的(至少它不适合我)。 (2认同)

rub*_*o77 20

仅适用于通过搜索如何更改 tmux 会话的标题来到这里的人:

Ctrl+ B,$

这会给您一个提示,您可以在其中重命名活动会话。

要更改活动窗口,请改用 komma:

Ctrl+ B,,

请参阅:如何在 tmux 中重命名会话?


Mik*_*kel 16

我不知道有什么方法可以让它PS1直接看你。

但是,tmux理解与设置窗口名称相同的命令screen

所以你可以在你的~/.bashrcor 中定义这样的函数~/.zshrc

settitle() {
    printf "\033k$1\033\\"
}
Run Code Online (Sandbox Code Playgroud)

然后settitle从任何地方调用。

例如,您可以将它包含在您的PS1变量中,例如

PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '
Run Code Online (Sandbox Code Playgroud)

或通过PROMPT_COMMAND

PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1
Run Code Online (Sandbox Code Playgroud)

现在我知道您tmux在桌面上运行,并且您希望ssh命令具有主机名而不是ssh,这要容易得多。

鉴于您已添加settitle到 local ~/.bashrc,您要做的就是添加以下内容:

ssh() {
    settitle "$*"
    command ssh "$@"
    settitle "bash"
}
Run Code Online (Sandbox Code Playgroud)

如有必要,将 bash 替换为 zsh 或其他更合适的内容。


Chr*_*her 9

结合 Mikel 和 UtahJarhead 的答案,我使用以下.zshrc方法解决了这个问题:

ssh() {
    tmux rename-window "$*"
    command ssh "$@"
    exit
}
Run Code Online (Sandbox Code Playgroud)

我默认启用了自动窗口重命名,并且在退出远程主机后找不到重新启用它的方法。因此,我只是完全退出窗口——这对我的工作流程来说不是问题。如果您希望将其重命名为“bash”,则可以将该exit行替换为tmux rename-window "bash".


小智 7

而不是exit或者tmux rename-window "bash"你可以使用

ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
            tmux rename-window "$*"
            command ssh "$@"
            tmux set-window-option automatic-rename "on" 1>/dev/null
    else
            command ssh "$@"
    fi
}
Run Code Online (Sandbox Code Playgroud)

这将重新激活为下一个命令自动重命名窗口的正常功能。

if块防止(没有它)tmuxssh其他 shell 上使用的命令(out of tmux)重命名当前窗口。