首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查是否存在指定名称的屏幕

检查是否存在指定名称的屏幕
EN

Stack Overflow用户
提问于 2012-09-04 08:28:04
回答 5查看 31.3K关注 0票数 36

我已经创建了一个bash文件,它在一个独立的屏幕中使用唯一的名称启动另一个bash文件,我需要确保在任何一个时间点上只有一个内部bash文件的实例在运行。为此,我想让父bash文件在尝试创建该文件之前检查该名称的屏幕是否存在。有什么方法可以做到这一点吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-04 08:35:18

您可以使用grep命令将screen -list的输出转换为要检查的会话的名称:

代码语言:javascript
运行
复制
if ! screen -list | grep -q "myscreen"; then
    # run bash script
fi
票数 43
EN

Stack Overflow用户

发布于 2015-02-26 00:30:24

鉴于我无法评论,我将此作为新的答案发布。troyfolger的回答是一个好主意,基本上相当于尝试向会话发送一个几乎没有什么作用的命令。一个问题是,对于某些(旧)版本的screen -Q不受支持,因此对于这些版本,正确的命令是

代码语言:javascript
运行
复制
screen -S Jetty -X select . ; echo $?

它发送命令"select“。添加到名为"Jetty“的屏幕会话中。

选择更改哪个窗口处于活动状态,然后。表示当前活动窗口,因此这意味着尝试将活动窗口更改为当前活动窗口。只有当没有我们想要连接的会话时,这才会失败。

如果你看了信息文档,那就建议你只使用select。使用-X作为测试或确保选择了某些内容。

票数 11
EN

Stack Overflow用户

发布于 2015-10-18 07:33:37

所有提出的解决方案都不处理没有唯一模式的屏幕名称,例如“测试”和"TEST123“。当你screen -S "TEST"screen -list "TEST"时,你可能会发现自己选择了屏幕"TEST123"!GNU screen实现屏幕名称匹配的方式存在错误(不确定)。

下面是一个bash函数,它尝试执行精确匹配,并返回带有退出代码的PID.SCREEN NAME

代码语言:javascript
运行
复制
function find_screen {
    if screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1 -q >/dev/null; then
        screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1 2>/dev/null
        return 0
    else
        echo "$1"
        return 1
    fi
}

用法-选择一个屏幕:

代码语言:javascript
运行
复制
target_screen=$(find_screen "SCREEN NAME")
screen -S "$target_screen" ...etc...

Usage -测试屏幕是否存在:

代码语言:javascript
运行
复制
if find_screen "SCREEN NAME" >/dev/null; then
    echo "Found!"
fi

无论如何,这将涵盖99.9%的案例。为了99,99%确定,在屏幕名称中转义grep特殊字符。完全匹配需要grep匹配整个行,直到$,包括括号中的日期,这可能会随着版本的不同而变化。另一种完美的匹配方法是:

代码语言:javascript
运行
复制
ls -A -1 /var/run/screen/S-${USER} | grep "^[0-9]*\.SCREEN NAME$"

但是这很麻烦,我们需要确保screen实现使用这个文件夹。我不推荐最后一种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12255388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档