在状态栏中正确显示 GNU 屏幕会话标题

在状态栏中正确显示 GNU 屏幕会话标题

在 GNU screen 中,我希望会话的标题显示在状态栏中。它可以工作,但并不完全符合我的要求。

我在 .screenrc 中定义了以下反引号:

backtick 100 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

正如我所说,它不仅显示屏幕会话标题,还显示该会话的 PID;例如,它显示类似

1234.foo

其中 foo 是该会话的名称。

我的问题:如何删除包括点在内的数字以仅显示会​​话的名称?(显然,我不太熟悉 grep...)

答案1

在您的情况下,使用 awk 可以轻松地从输出中获取会话名称screen -ls

screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'

在我的测试环境中:

(default sessionname)
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*"
12817.pts-5.hostname
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'
hostname

(sessionname is 'foo')
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*"
12817.foo
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'
foo

如果您使用最新版本的 GNU Screen (>= 4.1.0),您可以%S在标题上使用转义字符串或硬状态字符来显示会话名称。

hardstatus alwayslastline "[%S] some strings you like..."

答案2

正如我在对 yoshikaw 的回答的评论中所说的那样,我无法使用它(尽管我确信有办法做到这一点)。

但是,我找到了另一种方法来使用以下tr命令完成我想要的操作:

backtick 100 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | tr -d [:digit:]' | tr -d .

第一个tr命令删除 PID(数字),第二个tr命令删除点。

相关内容