在我的shell脚本中,我有以下一行:
export PATH=$PATH:/home/$USER/somedir
说我以用户mike身份登录。我需要以root身份执行shell脚本,所以我将其作为sudo filename.sh运行,因此在这种情况下$ USER会成为我路径中的root。
我希望它是运行脚本的用户,即mike而不是root。有没有办法实现这个目标?
谢谢
答案 0 :(得分:5)
你有使用/home/$USER
,还是$HOME
会这样做? IIRC,sudo
不会覆盖$HOME
的值。
答案 1 :(得分:1)
使用$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 /”前缀,但这将是一个丑陋的黑客。
答案 2 :(得分:0)
如果您愿意使用su
代替sudo
,则可以
su -cp filename.sh
在保留环境的同时执行命令。
答案 3 :(得分:0)
您可以尝试使用$ UID,该UID仍应设置为用户的真实ID号,并根据该值从密码数据库中检索其名称。
答案 4 :(得分:0)
如果需要保留环境,可以使用sudo的-E选项。但它需要一些配置和安全政策......如果Chris JY提出的$ HOME解决方案不适用,因为它更简单,这适用。
我的2美分答案 5 :(得分:0)
sudo 与“root”用户不同。如果任何用户具有sudo权限,则表示他具有用户“root”可用的管理员权限。也就是说,使用 sudo 不会将用户更改为root。