我正在尝试使用 screenrc 文件来改进 GNU Screen 的各个方面,我调整了颜色、状态行、标题和已加载窗口的列表。
我唯一无法实现的是获取当前执行的命令的标题,如下图所示,请注意右侧窗格中的 vim 标题:
我现在拥有的是这,我想要获得的是有标题(如果可能的话还有硬状态行),而|0 less| 1 man
不是当前的|0 bash| 1 bash
。
我怎样才能做到这一点?
更新:到目前为止,我发现的唯一可行的解决方案是这个帖子但它没有打印我需要的内容......
然而,这是迄今为止我发现的唯一有效的动态标题。
PROMPT_COMMAND='echo -ne "\033k\033\134\033k${HOSTNAME}[`basename ${PWD}`]\033\134"'`
在 .bashrc 和shelltitle '] |bash'
.screenrc 中。标题使用主机名和工作目录的基本名称进行更新,但提示完全错误(它还带有前导空格):
134134fabio@host10:~$
答案1
在您的.bashrc
文件中设置PROMPT_COMMAND
如下:
更新:
case "$TERM" in
screen*) PROMPT_COMMAND='echo -ne "\033k\033\0134"'
esac
更新:似乎是 bash 内置 echo 的一个错误。解决方案应该是使用/bin/echo
或\0134
。尝试:
$ echo -e "\134 = \0134"
\134 = \
$ /bin/echo -e "\134 = \0134"
\ = \
这是屏幕需要识别正在运行的命令的转义序列,并替换当前窗口的标题。
然后,.screenrc
确保文件中存在以下行:
shelltitle '> |something:'
hardstatus alwayslastline
模式search|name
告诉屏幕search
您end-of-prompt
输入一些字符串(在本例中为'> '
)。名称部分指定窗口的默认 shell 名称。因此,当您只运行 shell 时,您会看到类似以下内容:
$ something:
但是当你运行 top 时:
$ something:top
答案2
另外,您也可以使用tmux
而不是screen
。 Tmux
将自动设置当前窗口的标题。