在 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
命令删除点。