如果屏幕存在则运行命令

tha*_*man 1 bash shell gnu-screen

我有一个shell脚本,如果它存在,它应该杀死一个分离的屏幕会话.脚本是

if ! screen -list | grep -q "ScreenName"; then
  screen -S ScreenName -X quit
fi
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行脚本并且屏幕会话不存在时,屏幕-S ... -X quit命令似乎始终运行bc,它仍然输出"未找到屏幕会话".当我删除!并且屏幕会话正在运行,它不会终止正在运行的会话.

问题是什么?谢谢

Sir*_*hos 6

要摆脱"没有找到屏幕会话"消息,重定向stderr screen:

screen -list 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

接下来,请记住,-X如果会话受密码保护,则不起作用.

然后,使用-r让我们screen知道你只想杀死分离的会话,并且不再需要grepif.

把它们放在一起:

screen -r -S "ScreenName" -X quit 2>/dev/null
Run Code Online (Sandbox Code Playgroud)