![如何查找正在处理的屏幕会话](https://linux22.com/image/30788/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E6%AD%A3%E5%9C%A8%E5%A4%84%E7%90%86%E7%9A%84%E5%B1%8F%E5%B9%95%E4%BC%9A%E8%AF%9D.png)
我广泛使用屏幕程序。它减少了每天花在设置会话上的时间,对我帮助很大。但是,现在我有 >8 个屏幕 - 有时我会忘记我所在的屏幕。有没有办法找到我正在使用的屏幕会话的名称。 screen -ls 将列出所有屏幕会话。
有没有办法从所有当前活动的屏幕会话中分离出来 - 例如在一天结束时。
答案1
曾几何时,我使用这个简单的 shell 脚本作为 cron 作业,正如你所说,归根结底。
#!/bin/sh
screen -ls \
| awk '/\(Attached\)/{print $1}' \
| while read line ; do
screen -D $line ;
done
screen -D
(电源分离)也会向screen的父进程发送HANGUP信号(通常是关闭含有终端)。如果您愿意,可以使用-d
(分离)。
正如@doon 注意到的,你可以用来echo $STY
知道你在哪个屏幕。
答案2
比 andcoz' 稍微可靠的版本:
#! /bin/sh -
tab=$(printf '\t')
screen -ls |
while IFS=$tab read -r session time state; do
[ "$state" = "(Attached)" ] && screen -D "$session"
done
如果您在会话名称中使用制表符或换行符,它仍然不起作用。