出于某种原因,作为用户,我需要在没有sudo的情况下运行脚本script.sh,它需要root权限才能工作.
我看到将sudo INSIDE script.sh作为唯一的解决方案.我们来举个例子:
script.sh :
#!/bin/sh
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
当然,如果我执行这个脚本,我会得到一个提示,要求我输入密码.然后我添加到我的sudoers文件(最后覆盖其他所有内容):
user ALL=(ALL:ALL) NOPASSWD:/path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我也试过这条线:
user ALL=(ALL) NOPASSWD:/path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
(我想我没有完全理解其中的区别)
但是如果我不使用sudo来执行这个脚本,这并不能解决我的问题:
# ./script.sh
[sudo] password for user:
# sudo ./script.sh
Starts updating...
Run Code Online (Sandbox Code Playgroud)
好吧,所以我对自己说"好吧,这意味着如果我有一个像我一样的sudoers文件,只有当我用sudo打电话给他时,它才能正常工作,这不是我想要的".
好吧,我创建另一个脚本script2.sh如下:
script2.sh
#!/bin/sh
sudo /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
实际上它有效.但我对此解决方案并不满意,特别是因为我必须为每个命令使用2个脚本.
这篇文章是为了帮助人们解决这个问题,并寻找相同的解决方案(我没有找到一个好的帖子),也许有更好的解决方案来自你们.
随意分享您的想法!
编辑1:
我想坚持这样一个事实,即"apt-get update"只是我脚本实际上的一个例子.我的脚本有很多命令(有一些cd到root-access-only配置文件),解决方案不能"好吧,只需用apt-get直接执行".
一个例子的原则是帮助理解,而不是借口简化一般问题的答案.