Shell脚本和sudo

时间:2009-08-11 16:33:44

标签: unix shell

在我的shell脚本中,我有以下一行:

export PATH=$PATH:/home/$USER/somedir

说我以用户mike身份登录。我需要以root身份执行shell脚本,所以我将其作为sudo filename.sh运行,因此在这种情况下$ USER会成为我路径中的root。

我希望它是运行脚本的用户,即mike而不是root。有没有办法实现这个目标?

谢谢

6 个答案:

答案 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。