根据标题重新打开屏幕

根据标题重新打开屏幕

我使用以下命令创建了一个屏幕会话:

screen -t name

根据此名称,有什么方法可以重新打开此会话(假设没有重复的名称)?

答案1

我认为除了查看进程列表之外没有任何选择:

screen -r $(pgrep -f '\<SCREEN.* -t name\>')

在 *BSD 上需要一些不同的东西:

screen -r $(pgrep -t- -f '\<screen.* -t name\>')

选项-t-指示pgrep它仅匹配没有控制终端的进程,在这种情况下,仅匹配screen后端进程,而不是第一个附加的显示(确实将后端进程的screen更改为到处,但在 *BSD 上,对字符串的更改不会镜像在进程列表中,它们在 Linux 上的方式)。argv[0]"SCREEN"argv

在 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"
    ) "$@"
}

答案2

您需要做的就是在命令行上使用会话名称作为参数:

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 中得到验证。

相关内容