检测 GNU 屏幕是否正在运行的逻辑

检测 GNU 屏幕是否正在运行的逻辑

对于我正在开发的项目,我想检测屏幕是否以当前用户身份运行(附加或分离)。我想要一种使用最少数量的进程并且可以在基于发行版/unix 的操作系统之间移植的方法。

选项1

ps -U $USER|grep screen|grep -v grep &>/dev/null && screen-yes

这看起来很不整洁,但确实可以完成工作。 Darwin 需要额外的 grep,但 CentOS 不需要,有更好的方法吗?

选项2

screen -list|egrep '(There is a screen on|There are screens on)' &>/dev/null && screen-yes

这直接使用 screen 命令,但由于相对人性化的输出风格,需要大的正则表达式。

有一个更好的方法吗?

答案1

您应该能够使用屏幕上的返回代码。如果有屏幕则为 true,如果没有屏幕则为 false。

screen -list >/dev/null && screen-yes

答案2

我的解决方案是选项 1 的变体:

ps -U $USER | grep [s]creen &>/dev/null && screen-yes

字符串第一个字母周围的方括号screen使用 shell glob 魔法来避免grep在输出中返回命令。相同的最终效果,少一个grep命令。

答案3

if test ! -z "$STY" 
then    
    echo "I am running in GNU Screen"
fi

是一种不需要外部程序的快速解决方案。

答案4

pgrep -U $USER screen &>/dev/null && screen-yes

这不需要任何额外的进程,并解决了选项 1 相对较长的正则表达式的问题,使用 >1 进程和选项 2。我在一些相当旧的系统上发现了 pgrep,所以它应该是可移植的。

相关内容