我有一个脚本,当我登录时执行git-pull。问题是,如果我su使用不同的用户并使用su -lp保护我的环境,则脚本会再次运行并且通常会变得混乱原因是因为我是错误的用户。有没有一种方法可以在shell脚本中确定我目前是否在使用SUing?我正在寻找一种不涉及将我的用户名编码到脚本中的方法,这是我目前的解决方案。我使用Bash和ZSH作为炮弹。判断用户是否在shell脚本中有SUed?
回答
嗯....在Linux上,如果我su到其他用户的进程苏是新用户的进程列表。
sudo ...不会给你留下这样愉快的事情。
我正在使用zsh ...但我不认为这是任何特定的shell。
如果:
%PS | grep“su $”
返回任何东西,然后你运行在su'd shell中。
注意:su $之前有一个空格,用于排除仅以su结尾的命令。尽管如此,并不防范任何自定义的程序/脚本。
if test "$(id -u)" = "0"; : # commands executed for root else : # commands executed for non root fi
但是,如果你想要一个不同的非root用户?这就是我对这个问题的理解。 – SuperMagic 2010-01-20 18:57:25
如果您使用suid可执行文件更改用户身份,那么您真实有效的用户ID将会不同。但是如果使用su(或sudo),它们都将被设置为新用户。这意味着调用getuid()或geteuid()的命令将不会有用。
更好的方法是检查脚本运行的终端是谁拥有的终端。如果进程已经从终端上分离出来,这显然不起作用,但除非脚本正在由守护进程运行,否则这种情况不太可能发生。尝试stat -c %U $(tty)
。我相信who am i
也会在大多数类Unix操作系统上做同样的事情。
您可以使用“$ UID”环境变量。
如果它的值是零,则用户SUDO 版 .. BCOS根为$ UID == 0
除有时我su以外的其他用户... – spitfire 2010-01-27 21:22:20
- 1. 如何判断一个字符串是否未在bash shell脚本中定义?
- 2. 如何从shell脚本中判断调用它的shell是否是交互式shell?
- 3. Selenium IDE:如何判断用户是否在脚本提示中单击取消?
- 4. 如何判断用户是否离线
- 5. 如何判断在MySQL客户端脚本中是否发生错误
- 6. BASH:如何判断脚本是否使用退出?
- 7. Windows bat脚本:如何判断文件是否存在?
- 8. shell脚本如何判断它是否在具有256色支持的xterm窗口中运行?
- 9. 如何判断脚本是否以超级用户身份运行?
- 10. 如何判断批处理脚本是否存在其他脚本?
- 11. 如何使用shell来判断软件是否已安装?
- 12. shell脚本是否足够?
- 13. 如何判断文件是否可以从脚本写入?
- 14. jQuery,AJAX - 如何判断脚本是否返回false
- 15. 是否有可能判断用户是否浏览了页面的一部分?
- 16. 如何判断是否有控制台
- 17. 如何判断加载是否有效?
- 18. 如何判断ID是否是Facebook应用程序或用户
- 19. iPhone SDK - 如何判断文本字段是否有文本?
- 20. 如何判断一个脚本是否在后台运行并使用nohup?
- 21. 如何判断bash是否在Python脚本中特别逃避通配符
- 22. Swift + CLLocationManager:如何判断用户是否在特定的城市?
- 23. 如何判断用户是否在设备主屏幕上
- 24. 如何判断用户是否在特定的位置?
- 25. 在shell脚本中切换用户
- 26. shell脚本截断所有MySql表
- 27. 是否有可能判断WSAStartup是否在进程中被调用?
- 28. 如何判断makefile是否从交互式shell运行?
- 29. 如何判断门户页面上是否有portlet?
- 30. 如何判断用户是否在我的页面上选择了文本
你也可以用 “$ UID” 环境变量。这更好,因为你不需要输出任何命令,所以它会更快.. – 2010-01-23 12:09:25
if [$ UID -eq 0]; then ...... fi – 2010-01-23 12:11:02