我正在尝试使用 screenrc 文件改进 GNU Screen 的方面,我调整了颜色、状态行、标题和加载的窗口列表。
我唯一无法实现的是使用当前执行的命令获取标题,如下图所示,注意右侧窗格中的 vim 标题:

我目前拥有的是this,我想获得的是使用|0 less| 1 man而不是当前的|0 bash| 1 bash.
我怎样才能做到这一点?
更新:到目前为止,我找到的唯一可行的解决方案是在这篇文章中,但它没有打印出我需要的...
然而,这是迄今为止我发现的唯一有效的动态标题。
PROMPT_COMMAND='echo -ne "\033k\033\134\033k${HOSTNAME}[`basename ${PWD}`]\033\134"'`
Run Code Online (Sandbox Code Playgroud)
在 .bashrc 和shelltitle '] |bash'.screenrc 中。标题更新了主机名和工作目录的基名,但是提示完全错误(也有前导空格):
134134fabio@host10:~$
Run Code Online (Sandbox Code Playgroud)
在您的.bashrc文件中设置PROMPT_COMMAND如下:
更新:
case "$TERM" in
screen*) PROMPT_COMMAND='echo -ne "\033k\033\0134"'
esac
Run Code Online (Sandbox Code Playgroud)
更新:似乎是 bash 内置回声的错误。解决方案应该是使用/bin/echo或\0134。尝试:
$ echo -e "\134 = \0134"
\134 = \
$ /bin/echo -e "\134 = \0134"
\ = \
Run Code Online (Sandbox Code Playgroud)
这是 screen 需要识别正在运行的命令的转义序列,并替换当前窗口的标题。
然后,在您的.screenrc文件中,确保存在以下几行:
shelltitle '> |something:'
hardstatus alwayslastline
Run Code Online (Sandbox Code Playgroud)
该模式search|name告诉 screen 给search您end-of-prompt一些字符串(在本例中为'> ')。名称部分指定窗口的默认外壳名称。所以,当你只有 shell 运行时,你会看到类似的东西:
$ something:
Run Code Online (Sandbox Code Playgroud)
但是当你运行 top 时:
$ something:top
Run Code Online (Sandbox Code Playgroud)