哪种模式更可取:
#!/bin/bash
echo Installing blah
apt-get install -y blah
...如果没有root权限运行会失败,或者:
#!/bin/bash
echo Installing blah
sudo apt-get install -y blah
...只要用户具有sudo访问权限,它就会成功。
我倾向于使用第二种模式,但它似乎很少见,所以我问它的缺点是什么。我看到的好处是:
我认为缺点包括使用root权限可能会令人惊讶("我没有输入sudo
,所以我没想到像apt-get这样运行....&#34)。还有什么?
答案 0 :(得分:2)
我更喜欢第二种模式, 因为使用sudo运行一些命令比使用root权限运行整个脚本要好一些,其中一些命令不必具有root访问权限,因此如果你使用root用户执行这些命令,那么输出将再次需要root访问权限,或者你将拥有root权限改变所有权。 所以我更喜欢第二种方法,其中sudo是必要的,否则去本地用户。
答案 1 :(得分:2)
您可以随时测试用户是否为root用户(id -u
获取当前用户的uid,0为root用户),如果不是,则运行sudo
-
#!/bin/bash
echo Installing blah
CMD=""
if [ "$(id -u)" != "0" ]; then
CMD="sudo"
fi
${CMD} apt-get install -y blah
如果它们不是root,则更常见的方法是退出错误条件
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "sudo $0 (must run as root)"
exit 1
fi
echo Installing blah
apt-get install -y blah
答案 2 :(得分:0)
第二个选项是正确的选项。不需要root访问权限的命令不应仅以root身份运行以简化脚本。需要root访问权限(或任何特定用户访问)的命令应该由sudo运行。为清楚起见,您可以使用-p
sudo
选项来显示自定义提示,该提示可以准确解释用户被要求输入密码的原因。
选项二也是首选,因为sudo
具有高度可配置性,并且用户可能已经拥有使用sudo
运行特定命令的权限,而无需密码,因此&#39 ;用户不会因密码提示而感到不便。在没有密码的情况下,允许用户sudo
任意命令(例如您的脚本)的可能性较小。