
有没有办法在 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 提示(以区分普通终端会话的屏幕会话),我需要采用两部分方法。
- 在文件中设置提示
~/.screenrc
。 - 通过普通的 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 ~]$