告诉用户是否在shell脚本中起诉?

告诉用户是否在shell脚本中起诉?,shell,zsh,bash,Shell,Zsh,Bash,我有一个脚本,它在我登录时执行git pull。问题是,如果我向不同的用户su,并使用su-lp保存我的环境,脚本会再次运行,并且由于各种原因通常会出错,因为我是错误的用户。有没有办法在shell脚本中确定我是否正在起诉?我正在寻找一种不涉及将我的用户名硬编码到脚本中的方法,这是我目前的解决方案。我使用Bash和ZSH作为shell。您可以将命令的输出用于命令: 嗯。。。。在linux上,如果我向另一个用户su,那么进程su就在新用户的进程列表中 苏多。。。不会给你留下这么好的东西 我用的是zs

我有一个脚本,它在我登录时执行git pull。问题是,如果我向不同的用户su,并使用su-lp保存我的环境,脚本会再次运行,并且由于各种原因通常会出错,因为我是错误的用户。有没有办法在shell脚本中确定我是否正在起诉?我正在寻找一种不涉及将我的用户名硬编码到脚本中的方法,这是我目前的解决方案。我使用Bash和ZSH作为shell。

您可以将命令的输出用于命令:


嗯。。。。在linux上,如果我向另一个用户su,那么进程su就在新用户的进程列表中

苏多。。。不会给你留下这么好的东西

我用的是zsh。。。但我不认为这里面有什么是特定于shell的

如果:

%ps | grep“su$”

返回任何内容,然后您将在su'd shell中运行

注意:su$前面有一个空格,用于排除以su结尾的命令。但是,它不防范任何名为su的自定义程序/脚本

if test "$(id -u)" = "0"; : # commands executed for root else : # commands executed for non root fi 如果测试“$(id-u)”=“0”; :#为root用户执行的命令 其他的 :#为非root用户执行的命令 fi
如果您正在使用suid可执行文件更改用户身份,则实际有效的用户id将不同。但是如果使用su(或sudo),它们都将被设置为新用户。这意味着调用getuid()或geteuid()的命令将不再有用

更好的方法是检查谁拥有正在运行脚本的终端。如果进程已从其终端分离,这显然不起作用,但除非脚本由守护进程运行,否则这是不可能的。试试
stat-c%U$(tty)
。我相信
我是谁
在大多数类似Unix的操作系统上也会做同样的事情。

您可以使用“$UID”环境变量


如果其值为零,则用户已SUDOed。。Bcos root作为$UID==0

但是如果您要使用另一个非root用户呢?我就是这样理解这个问题的。您也可以使用“$UID”环境变量。这更好,因为您不必获取任何命令的输出,因此速度会更快。。 if test "$(id -u)" = "0"; : # commands executed for root else : # commands executed for non root fi