运行特定的命令

问题描述:

我有一个bash脚本,我与sudo运行:sudo NewScript运行特定的命令

剧本里面,我有一个git命令,我不希望与运行sudo。目前,由于整个脚本运行在sudo这个命令也运行在sudo,这就是我想要压制的。

这样的事情是可能的吗?或者我需要运行脚本而不是sudo并且为git命令以外的脚本中的每个命令添加sudo

+1

当您使用'sudo'运行脚本时,脚本基本上运行得如同它由root用户运行一样。因此,我能想到的唯一解决方案就是使用特定用户的权限运行git命令,例如:'sudo -S [username] [git command]' – Dunno

+0

如果后一种方法,如果'sudo'需要密码,那么您将被提示输入所有这些命令的密码。 – Inian

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

在脚本中使用正常的$USER权限运行git命令。

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

-c标志传递命令到外壳,根据man su页,

-c,--command =命令 通行证命令与-c选项的壳。

+0

同上。我总是这样做,很好。 –

注意sudo运行程序的不同用户,不一定为root; root只是默认值。因此,您的目标可能不是运行您的具体git命令,而不是sudo,而是以不同于其他用户的身份运行它。

如果你想你的git命令通过硬编码的用户the_user运行,只是把

sudo -u the_user <your git command> 

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

如果不知道用户预先而是希望git命令由谁称为sudo newScript使用

sudo -u $SUDO_USER <your git command> 

,而不是(感谢@thatotherguy该提示)运行。

+1

您可以使用'$ SUDO_USER'代替包装。 'sudo'将它设置为调用用户。 –

+0

@thatotherguy谢谢,我将这些信息添加到答案中。 – Dreamer