在Windows上,tmux
通过MobaXterm连接到CentOS 7上的1.8。
理想情况下,我希望我的tmux窗口具有我在活动窗格中键入的最后一个命令的名称(例如,cd /home
不bash
喜欢{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'
有什么方法可以通过最后完成的命令来命名tmux窗口?
如果不是,我如何正确地将其设置为my PS1
,它根据我的用户名和路径是动态的?
解决了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] 删除。
我来说两句