我有一个部分需要使用默认用户权限运行的bash脚本,但有些部分涉及使用sudo
(比如将内容复制到系统文件夹中)我可以用{{1运行脚本但是,如果涉及在脚本中创建或修改文件,则会破坏所有文件访问权限。
那么,如何使用sudo ./script.sh
为某些命令运行脚本?是否可以在开始时(当脚本刚刚启动时)请求sudo密码,但仍然以当前用户身份运行某些脚本?
答案 0 :(得分:3)
您可以将其添加到脚本的顶部:
while ! echo "$PW" | sudo -S -v > /dev/null 2>&1; do
read -s -p "password: " PW
echo
done
确保sudo凭据缓存5分钟。然后你可以运行需要sudo的命令,以及那些前面有sudo
的命令。
编辑:在评论中加入mklement0的建议,您可以将其缩短为:
sudo -v || exit
如果您想要更多地控制提示或重试逻辑/限制,我从Python snippet改编的原始版本可能很有用,但是这个较短的版本可能适用于大多数情况
答案 1 :(得分:1)
脚本的每一行都是命令行。因此,对于您想要的行,您只需将sudo
放在脚本的这些行的前面即可。例如:
#!/bin/sh
ls *.h
sudo cp *.h /usr/include/
echo "done" >>log
显然我只是搞砸了。但是,这表明您可以选择性地使用sudo
作为脚本的一部分。
就像以交互方式使用sudo
一样,如果您最近没有这样做,系统会提示您输入用户密码。