在使用sudo bash运行脚本时,如何在不使用sudo的情况下运行特定命令

15

我有一个 bash 脚本,使用 sudo 运行:sudo NewScript

脚本中有一个 git 命令,我不希望用 sudo 运行。目前,由于整个脚本是用 sudo 运行的,因此这个命令也会用 sudo 运行,我想要禁止这种情况发生。

这种做法是否可行?或者我需要在脚本中删除 sudo 并且在除了 git 命令之外的每个命令前加上 sudo


2
当您使用sudo运行脚本时,该脚本基本上会像root用户一样运行。因此,我能想到的唯一解决方案是以特定用户的权限运行git命令,如下所示:sudo -S [用户名] [git命令] - Dunno
如果采用后一种方法,如果需要 sudo 密码,您将被提示输入密码以执行所有此类命令。 - Inian
2个回答

11
请注意,sudo 运行程序时使用的是一个 不同的 用户,不一定是 rootroot 只是默认用户。因此,你的目标可能不是不使用 sudo 来运行特定的 git 命令,而是将其作为与其他用户不同的用户运行。
如果你想让你的 git 命令由硬编码的用户 the_user 运行,只需输入
sudo -u the_user <your git command>

在您的脚本中(这不会在以root身份运行脚本时提示您输入密码)。

如果您事先不知道用户,而是希望git命令由调用sudo newScript的人运行,请使用以下方法:

sudo -u $SUDO_USER <your git command>

相反地(感谢@thatotherguy的提示)。


4

一种可采用的方法是使用su切换到普通用户权限,动态运行而不是实际更改访问权限。

在脚本内部以普通的$USER权限运行git命令。

su - "$USER" -c "git_command1; git_command2;"

-c 标志用于向shell传递命令,根据 man su 页面的说法,

-c, --command=command 使用 -c 选项将命令传递给shell。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接