将sudo应用于脚本中的某些命令

时间:2013-12-24 00:22:55

标签: bash

我有一个部分需要使用默认用户权限运行的bash脚本,但有些部分涉及使用sudo(比如将内容复制到系统文件夹中)我可以用{{1运行脚本但是,如果涉及在脚本中创建或修改文件,则会破坏所有文件访问权限。

那么,如何使用sudo ./script.sh为某些命令运行脚本?是否可以在开始时(当脚本刚刚启动时)请求sudo密码,但仍然以当前用户身份运行某些脚本?

2 个答案:

答案 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一样,如果您最近没有这样做,系统会提示您输入用户密码。