需要 sudo 的脚本是否应该在没有它的情况下失败,或者使用 sudo 和提示?

Joh*_*lla 26 bash sudo shell-script

我有一个脚本,它可以让我对背光亮度进行细粒度控制,并且需要sudo运行。本质上是这样的:

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
Run Code Online (Sandbox Code Playgroud)

并住在~/bin/backlight-adjust. 该脚本需要sudo特权,因为tee $backlight正在写入特权位置。因此,如果不使用sudo.

这种方法有一个问题,因为我不能随便跑sudo backlight-adjust,因为~/bin不在$PATHsudo环境下,只有在我的环境。所以我必须跑步sudo env "PATH=$PATH" backlight-adjust或类似的东西。

或者,我可以这样写:

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
Run Code Online (Sandbox Code Playgroud)

并提示我输入密码。

第二种方法对我来说效果更好,因为我不必记得输入 sudo;它会提示我。我可以保持我的$PATH完好无损。总体而言,这感觉更方便,但有什么理由我不应该采用第二种方式吗?

(我正在运行 Xubuntu 14.04,我的 shell 是 GNU bash 4.2.45,如果这有区别的话。)

ter*_*don 27

就个人而言,我会使用不同的方法。为您的脚本创建一个别名。将此行添加到您的~/.bashrc(或其他 shell 中的等效项)

alias backlight-adjust='sudo ~/bin/backlight-adjust'
Run Code Online (Sandbox Code Playgroud)

这样,您就不必担心记得使用它运行它,sudo也不需要将 添加sudo到脚本中。它将对您完全透明,只需在您尝试运行时询问您的密码即可backlight-adjust


Rma*_*ano 7

我不明白为什么它可能是不正确的——尽管我通常更喜欢命令不会向我提问,因此它们是可编写脚本的。您可以调整/etc/sudoers以使其sudo在没有密码的情况下工作。

但是......为什么不添加

chgrp  one-of-your-groups-here /sys/class/backlight/acpi_video0/brightness     
chmod g+w /sys/class/backlight/acpi_video0/brightness 
Run Code Online (Sandbox Code Playgroud)

在你/etc/rc.local和忘记sudo

(在 Ubuntu 中,如果您可以使用,sudo您就在sudo组中,因此您可以使用它chgrp sudo /sys...并对此感到满意。)