在特定屏幕窗口中运行进程(如果存在),否则创建该屏幕,然后执行此操作

在特定屏幕窗口中运行进程(如果存在),否则创建该屏幕,然后执行此操作

我对 的经验很少screen,最近发现它有窗户。在此之前,我只是为我需要运行的每个进程创建一个新会话(我知道,对吧?)。然而,既然我发现了,我希望我的进程在单个屏幕上运行。启动时,需要在该屏幕的窗口中运行多个进程,但我不知道如何在特定窗口中运行它们,如果会话不存在则创建会话。我希望进程占用特定的窗口(8 和 9)。

我知道它将screen -dmS main bash在名为 main 的屏幕会话中执行 bash,但这总是会创建一个新会话。我不知道要运行什么,以便 bash 在窗口 9 中的一个名为 的会话中运行main,无论该会话之前是否存在,main之后只存在一个会话。

我需要在启动时运行哪些命令才能实现此目的?

答案1

您需要使用-ls标志。

bash-4.3$ screen -dmS main bash
bash-4.3$ screen -ls
There is a screen on:
    7144.main   (2017年01月28日 20时05分05秒) (Detached)
1 Socket in /var/run/screen/S-xieerqi.

-ls将向您显示现有会话,您可以使用-x标记重新附加到它们。从脚本角度来说,你可以这样做:

bash-4.3$ my_session=$(screen -ls | awk '/[[:digit:]]\.main/{print $1}')
bash-4.3$ screen -x $my_session

相关内容