使tmux窗口名称使用bash $ PS1

jeremysprofile

在Windows上,tmux通过MobaXterm连接到CentOS 7上的1.8。

理想情况下,我希望我的tmux窗口具有我在活动窗格中键入的最后一个命令的名称(例如,cd /homebash喜欢{pane_current_command}打印)。我不知道该怎么做,所以我试图找出如何使名称与PS1活动窗格的名称匹配在我的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]\\$ '

并得到了

bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'

  1. 有什么方法可以通过最后完成的命令来命名tmux窗口?

  2. 如果不是,我如何正确地将其设置为my PS1,它根据我的用户名和路径是动态的?

jeremysprofile

解决了tmux 2.6和tmux 1.8(均经过测试)。

tmux显示动态窗口标题,请将您~/.bashrc的内容编辑为类似于以下内容的内容:

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;'

并且(可能)您~/.tmux.conf需要具备:

setw -g automatic-rename on

据我了解,settitle()基本上是在执行每个命令后重命名窗口。我不完全了解它是如何做到的。

PROMPT_COMMAND是bash的一部分,它在您运行每个命令后运行,这使您可以做一些很酷的事情,例如跟踪您连续输入了多少个正确的bash命令,以及我们在此处不断重新定义标题的用法。

$TERM是一个环境变量,对我来说,在tmux中设置为“ screen”(或类似“ screen-256color”之类),在使用MobaXterm时设置为“ xterm”。我们对此进行检查,因为否则,$PS1当您不在tmux中时,您的文件将被打印两次。

dynamic_title必须用单引号,否则会当你的源来定义~/.bashrc,而不是动态的。但是,您需要在某个时候定义它,否则您的窗口将按字面重命名${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}就是eval这样,创建了一个字符串,该字符串实际上就是您想要的窗口标题。然后,我们只需将该字符串赋予settitle(),并用双引号引起来即可正确使用空格。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章