[英]Shell script and sudo
在我的shell脚本中,我有以下内容:
export PATH=$PATH:/home/$USER/somedir
假设我以Mike用户身份登录。 我需要以root用户身份执行shell脚本,因此我以sudo filename.sh身份运行它,因此$ USER在这种情况下成为我的路径中的root用户。
我希望它是运行脚本的用户的名称,即mike而不是root。 有没有办法做到这一点?
谢谢
您必须使用/home/$USER
,还是$HOME
可以解决问题? IIRC, sudo
不会覆盖$HOME
的值。
使用$SUDO_USER
(如果您坚持直接使用$USER
,请如下所示设置其值):
$ cat script.sh
#!/bin/bash
if [ "$SUDO_USER" != "" ]; then
USER=$SUDO_USER;
fi
export PATH=$PATH:/home/$USER/somedir
或使用$USER
作为脚本的第一个参数作弊(错误检查是读者的一项练习):
$ cat script.sh
#!/bin/bash
USER=$1
export PATH=$PATH:/home/$USER/somedir
然后:
$ sudo ./script.sh $USER
或使用Chris Jester-Young建议的$HOME
。 您可以使用bash删除“ / home /”前缀,但这将是一个丑陋的破解。
如果您愿意使用su
而不是sudo
,则可以
su -cp filename.sh
在保留环境的同时执行命令。
您可以尝试使用$ UID,该$ UID仍应设置为用户的真实ID号,并以此为基础从密码数据库中检索其名称。
如果需要保护环境,可以使用sudo的-E选项。 但是它需要一些配置和安全策略...如果Chris JY提出的$ HOME解决方案因为更简单而不适用,则适用。
我的2美分
sudo是不同形式的“ root”用户。 如果任何用户具有sudo特权,则意味着他具有用户“ root”可用的管理员权限。 也就是说,使用sudo不会将用户更改为root。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.