Answers:
我不知道有什么办法可以PS1
直接看您的眼神。
但是,tmux
了解与设置窗口名称相同的命令screen
。
因此,您可以在~/.bashrc
或中定义如下函数~/.zshrc
:
settitle() {
printf "\033k$1\033\\"
}
然后settitle
从任何地方打电话。
例如,您可以将其包含在PS1
变量中,例如
PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '
或通过PROMPT_COMMAND
:
PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1
现在,我了解到您已经tmux
在桌面上运行了,并且您希望ssh
命令使用主机名而不是ssh
,这要容易得多。
鉴于您已将您添加settitle
到local ~/.bashrc
,所以您还想要添加以下内容:
ssh() {
settitle "$*"
command ssh "$@"
settitle "bash"
}
用zsh替换bash,或在必要时使用其他更合适的方法。
PROMPT_COMMAND='settitle $HOSTNAME:$PWD'
-由于使用@Mikel的代码,因此-bash: : No such file or directory
在每个命令提示符之前我都没有主机名和错误。在我看来,$()
这会让bash尝试执行任何settitle
回报。(我在Linux上运行bash。)
tmux rename-window -t${TMUX_PANE} "Title Text"
这是在窗口中设置tmux标题的正确方法。$ TMUX_PANE变量由tmux设置,用于区分不同的窗格。
-t${TMUX_PANE}
不是必需的(至少对我而言不是)。
sleep 3
切换窗口,那么在睡眠完成时,提示符将向错误的窗口发出命令。(这就是我来这里的原因,+ 1)。
仅针对通过搜索如何更改tmux会话标题的用户来到这里:
Ctrl+ B,$
这将提示您,您可以在其中重命名活动会话。
要更改活动窗口,请使用komma代替:
Ctrl+ B,,
请参阅:如何在tmux中重命名会话?
结合Mikel和UtahJarhead的答案,我使用以下.zshrc
方法解决了这个问题:
ssh() {
tmux rename-window "$*"
command ssh "$@"
exit
}
默认情况下,我启用了自动窗口重命名功能,退出远程主机后找不到重新启用它的方法。因此,我只是完全退出窗口-对我的工作流程来说不是问题。如果您更愿意将其重命名,比如说,“庆典”,你可以更换exit
同线tmux rename-window "bash"
。
hostname -s
在命令ssh“ @ $”之后使用tmux重命名窗口,它基本上将标题重新设置为“网关”机器。
代替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
}
这将重新激活正常功能,该功能会自动重命名下一个命令的窗口。
该if
块阻止(不带它)tmux
从ssh
其他shell(在之外tmux
)中使用的命令重命名当前窗口。
if env | grep -q "TMUX_PANE"; then
而不是ps -p...
东西,但原理相同。
将此添加到.profile
或.bashrc
# Change window name for `tmux`
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
#tmux rename-window "$(echo $* | cut -d . -f 1)"
tmux rename-window "$(echo $* | cut -d @ -f 2)"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}