有没有办法让哪个会话与屏幕中的哪个日志文件相关联?

Is there a way to get which session is associated with which logfile in screen?

我正在使用 screen 来监视多个并行作业以测试我的程序的小变化。我给每个 screen 会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,但现在希望我做到了!

有没有办法查询哪个会话名称(通常为 #####.ttys000N.hostname 形式)与哪个日志文件对应,反之亦然?


(与谁有关: 标签建议确定问题与哪个 SX 站点最相关。根据 SuperUser 和 Whosebug 的帮助页面,这个问题似乎大致同样适用于任何一个社区。随意迁移它如果您认为它属于其他地方。)

我没有找到我建议的评论,即使用 screen -ls 列出进程 ID,然后对这些进行 lsof -p 以找到非常令人满意的文件名,所以这里是另一个不完全令人满意的选择:

有一个选项 -X 可以将命令发送到远程屏幕,但遗憾的是任何输出都显示在远程屏幕上。有一个选项 -Q 可以发送命令并在本地打印结果,但它只接受一组非常有限的命令。但是,其中之一是 lastmsg,它重复显示的最后一条消息。

因此您可以使用 -X logfile 远程显示日志文件的名称,然后立即使用 -Q lastmsg 在本地复制该显示!当然,在这个非原子动作的中间可能会发生一些事件。这两个命令不能组合。这是一个例子:

#!/bin/bash
screen -ls |
while read session rest
do  if [[ "$session" =~ [0-9]+\..+ ]]
    then  screen -S "$session" -X logfile # shows in status
          msg=$(screen -S "$session" -Q lastmsg)
          # logfile is '/tmp/xxxxx'
          echo "$session $msg"
    fi
done

和一些典型的输出:

21017.test2 logfile is '/tmp/xxxxx'
20166.test logfile is '/tmp/mylog.%n'