![如何检查用户是否使用图形会话登录,并且同一用户正在执行脚本](https://linux22.com/image/1202248/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E7%94%A8%E6%88%B7%E6%98%AF%E5%90%A6%E4%BD%BF%E7%94%A8%E5%9B%BE%E5%BD%A2%E4%BC%9A%E8%AF%9D%E7%99%BB%E5%BD%95%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%90%8C%E4%B8%80%E7%94%A8%E6%88%B7%E6%AD%A3%E5%9C%A8%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC.png)
我有一个 bash 脚本,它除其他功能外还使用了该gsettings
命令。在我看来,要使该命令起作用,用户必须使用图形会话登录,并且显然还必须以自己的身份(即非 root)执行该脚本。
我可以通过查看 TERM 变量来检查他们是否正在使用图形终端,但是如何确保脚本的执行者与使用图形会话登录的用户是同一个?
答案1
去检查谁已登录您可以使用
who
。去检查哪个用户运行了脚本:
ps aux | grep $0 | awk '{ print $1 }' | uniq
ps aux
:在第一列列出所有正在运行的进程,包括相应的用户。grep $0
:搜索当前脚本awk '{ print $1 }'
:仅打印第一列的内容uniq
:删除可能的重复项检查运行脚本的用户是否与登录用户相同:
LOGED_USER=$(who | awk '{ print $1 }') EXEC_USER=$(ps aux | grep $0 | awk '{ print $1 }' | uniq) if [ $LOGED_USER == $EXEC_USER ]; then echo "Same USER" else echo "Different USER" fi