我有一个脚本,当我登录时执行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. BASH:如何判断脚本是否使用退出?
- 4. 如何使用shell来判断软件是否已安装?
- 5. 如何判断文件是否可以从脚本写入?
- 6. jQuery,AJAX - 如何判断脚本是否返回false
- 7. 是否有可能判断用户是否浏览了页面的一部分?
- 8. iPhone SDK - 如何判断文本字段是否有文本?
- 9. 如何判断加载是否有效?
- 10. 如何判断一个脚本是否在后台运行并使用nohup?
- 11. 如何判断bash是否在Python脚本中特别逃避通配符
- 12. shell脚本截断所有MySql表
- 13. 如何判断用户是否在设备主屏幕上
- 14. 如何判断makefile是否从交互式shell运行?
- 15. 是否有可能判断WSAStartup是否在进程中被调用?
- 16. 是否有可能在C程序中包含shell脚本
- 17. 检查文件中是否存在现有的md5sum - Shell脚本
- 18. 如何判断用户是否在我的页面上选择了文本
- 19. 如何使用jQuery来判断用户是否可以滚动?
- 20. 用什么方法来判断用户是否连接到facebook
- 21. 如何判断用户是否启用了“话语提示”?
- 22. 如何判断用户是否试图用C++关闭窗口?
- 23. 如何判断用户是否使用iPhone 6或6+
- 24. 如何判断文件是否是使用PHP的文本?
- 25. 如何判断soundmanager2是否使用html5?
- 26. 如何判断AUCTeX是否可用?
- 27. 如何判断是否使用glibc
- 28. unordered_map判断钥匙是否在地图
- 29. PHP:判断文件是否存在?
- 30. 如何判断网页是否存在?
你也可以用 “$ UID” 环境变量。这更好,因为你不需要输出任何命令,所以它会更快.. – 2010-01-23 12:09:25
if [$ UID -eq 0]; then ...... fi – 2010-01-23 12:11:02