在 shell 提示符中显示 GNU 屏幕会话名称和窗口标题

在 shell 提示符中显示 GNU 屏幕会话名称和窗口标题

有没有办法在 shell 提示符(比如说,由 定义的 Bash 提示符PS1)中显示 GNU Screen 会话名称和窗口标题?

答案1

Screen 提供了一些环境变量(来自screen(1) 联机帮助页):

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

“在创建时”意味着如果您重新编号窗口(使用 screen 的number命令),shell 将不会被告知更改,并且 $WINDOW 仍将与第一个窗口编号相同。

你可以使用类似的东西:

PS1='\u@\h(${STY}:${WINDOW}):\w$ '

答案2

我总是使用精确的屏幕会话名称。然后我可以将屏幕的 STY 环境变量添加到 PS1,并删除数字 id(感谢 dimo414)。我不会用花括号或任何东西来装饰它,因为我并不总是在会话中。简单的例子:

PS1='\u@\h ${STY#[0-9]*.} \w$ '

答案3

我用这个:

(`echo ${STY} | sed -e 's/[0-9]*\.//g'`:${WINDOW}:`screen -Q title`)

从中删除进程号${STY}
包括窗口号(如“创建时”所述)
包括窗口标题(从 返回screen -Q title

笔记:

  • 第一次运行时,screen -Q等待回车键
  • 我使用 Ca CA 设置窗口标题,然后获取我的 .profile 来更新提示

答案4

我通常使用命名屏幕,例如:screen -S vim ## see: screen -h

为了在屏幕中获得显示屏幕会话名称的 PS1 提示(以区分普通终端会话的屏幕会话),我需要采用两部分方法。

  1. 在文件中设置提示~/.screenrc
  2. 通过普通的 BASH 别名获取该文件(在屏幕会话内)~/.bashrc
# -----------------------------------------------------------------------------
# ~/.screenrc    ## or whatever you want to name it

PS1='[\u@\h (screen: ${STY#[0-9]*.}) \w]$ '
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# ~/.bashrc

alias ssrc='source ~/.screenrc'    ## or whatever you named it (comment above)
# -----------------------------------------------------------------------------

用法:

[me@vps1360 ~]$ screen -S test

  # -----------------------------------------------------------------------------
  # Named screen session:

  [me@vps1360 ~]$ ssrc
  [me@vps1360 (screen: test) ~]$    ## PS1 prompt with screen session name
  # Ctrl-a d
  [detached from 9278.test]
  # -----------------------------------------------------------------------------

[me@vps1360 ~]$

相关内容