我有一个脚本将另一个脚本称为sudo。在第二个脚本中,我希望能够在没有 sudo 权限的情况下运行另一个进程(有问题的进程是 brew
,它不能很好地与 sudo
配合使用)。
这是有问题的代码:
scriptA.sh:
#!/bin/sh
sudo ./scriptB.sh
scriptB.sh:
#!/bin/sh
# This runs as sudo, but I need it to run as a regular user e.g. `username`
brew update
我尝试了su -c "brew update" -s /bin/sh username
,但OS X的su
不允许c
标志。
只需再次使用sudo
:
sudo -u username brew update
超级用户可以使用su
命令成为任何其他用户。所以
su otheruser -c "command to execute"
OS X su
确实允许-c
选项。您只需将其放在用户名之后即可。从手册页:
如果在命令行上提供了可选的参数,则它们将传递到目标登录的登录 shell。 请注意,目标登录名之前的所有命令行参数都由 su 本身处理,目标登录名之后的所有参数都传递给 登录外壳。
在这种情况下,-c
不是 su
命令的选项,而是登录 shell 的选项。大多数 shell 都采用-c
选项来指定要执行的命令。