William Asked: 2018-09-25 09:20:46 +0800 CST2018-09-25 09:20:46 +0800 CST 2018-09-25 09:20:46 +0800 CST 根据标题重新打开屏幕 772 我使用以下命令创建了一个屏幕会话: screen -t name 基于这个名字,有没有办法重新打开这个会话(假设没有重复的名字)? terminal gnu-screen 2 个回答 Voted Best Answer mosvy 2018-09-25T14:07:03+08:002018-09-25T14:07:03+08:00 我认为没有任何选择——除了查看进程列表: screen -r $(pgrep -f '\<SCREEN.* -t name\>') 在 *BSD 上需要一些不同的东西: screen -r $(pgrep -t- -f '\<screen.* -t name\>') 的-t-选项pgrep指示它只匹配没有控制终端的进程,在这种情况下只匹配screen后端进程,而不是第一个附加的显示(确实screen将argv[0]后端进程"SCREEN"的argv在进程列表中,它们在 Linux 上的方式)。 在 FreeBSD 上,-a可能还需要选项('也匹配调用进程的祖先')。不幸的是,pgrep -t-在 Linux 上不受支持,并且pgrep -a做一些完全不同的事情。 所以,把它全部放在一个函数中: # usage tscreen title [args ...] tscreen(){ title=$1; shift screen -r $( pgrep -f "\\<SCREEN.* -t $title\\>" || pgrep -t- -f "\\<screen.* -t $title\\>" || pgrep -at- -if "\\<screen.* -t $title\\>" || echo "title=$title" ) "$@" } Jenny D 2018-10-30T00:56:44+08:002018-10-30T00:56:44+08:00 您需要做的就是在命令行中使用会话名称作为参数: screen -r SESSIONNAME 如果您有多个具有相同会话名称的屏幕,您还需要指定 PID,如下所示: [jenny@sameen ~]$ screen -r test1 There are several suitable screens on: 23669.test1 (Detached) 23594.test1 (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them. [jenny@sameen ~]$ screen -r 23669.test1 这在 RHEL7 上的屏幕 4.01.00devel 和 BSD 上的 4.04.00 中得到验证。
我认为没有任何选择——除了查看进程列表:
在 *BSD 上需要一些不同的东西:
的
-t-
选项pgrep
指示它只匹配没有控制终端的进程,在这种情况下只匹配screen
后端进程,而不是第一个附加的显示(确实screen
将argv[0]
后端进程"SCREEN"
的argv
在进程列表中,它们在 Linux 上的方式)。在 FreeBSD 上,
-a
可能还需要选项('也匹配调用进程的祖先')。不幸的是,pgrep -t-
在 Linux 上不受支持,并且pgrep -a
做一些完全不同的事情。所以,把它全部放在一个函数中:
您需要做的就是在命令行中使用会话名称作为参数:
如果您有多个具有相同会话名称的屏幕,您还需要指定 PID,如下所示:
这在 RHEL7 上的屏幕 4.01.00devel 和 BSD 上的 4.04.00 中得到验证。