Zoe*_*oey 30 linux bash gnu-screen
我创建了一个bash文件,它在一个具有唯一名称的分离屏幕中启动另一个bash文件,我需要确保在任何一个时间点只运行该内部bash文件的一个实例.为此,我想在尝试创建之前检查父bash文件以查看该名称的屏幕是否存在.有没有办法做到这一点?
che*_*ner 31
您可以grep输出screen -list您要检查的会话名称:
if ! screen -list | grep -q "myscreen"; then
# run bash script
fi
Run Code Online (Sandbox Code Playgroud)
tro*_*ger 18
您可以查询特定会话的屏幕'select'命令; 如果会话存在,则shell结果为"0",如果未找到指定的屏幕会话,则结果为"1":
$ screen -S Tomcat $ screen -S Tomcat -Q select . ; echo $? 0
与:
$ screen -S Jetty -Q select . ; echo $? No screen session found. 1
注意,'.'后面select是可选的,但可能更健壮.
鉴于我无法发表评论,我将其作为新答案发布.troyfolger的回答是一个好主意,基本上相当于尝试向会话发送一个很少做的命令.一个问题是,对于某些(较旧的)版本的屏幕-Q不受支持,因此对于这些版本,正确的命令是
screen -S Jetty -X select . ; echo $?
Run Code Online (Sandbox Code Playgroud)
其中发送命令"选择".到名为"Jetty"的屏幕会话.
选择更改哪个窗口处于活动状态.表示当前活动窗口,因此这意味着尝试将活动窗口更改为当前活动窗口.如果没有连接到我们想要的会话,这只会失败.
如果您阅读的信息文档比它建议的唯一使用选择.使用-X作为测试或确保选择某些内容.