对于我正在开发的项目,我想检测屏幕是否以当前用户身份运行(附加或分离)。我想要一种使用最少数量的进程并且可以在基于发行版/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,所以它应该是可移植的。