我已经成功创建了一个需要 root 权限的 bash 脚本,我可以以 root 身份运行它!但是,只有当我以 root 身份使用终端时,该脚本才会运行,如果我输入 exit,它就会运行。当我输入:
bash lights_infinity.sh
终端什么都不做。为什么会这样?这正常吗?代码是
#!/bin/bash
sudo su
while true
do
sudo -k setleds -D +caps < /dev/console
sleep 0.1
sudo -k setleds -D +caps < /dev/console
sleep 0.1
sudo -k setleds -D -caps < /dev/console
sleep 0.1
done
我需要删除 sudo 命令吗?
答案1
我会
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
while true
do
setleds -D +caps < /dev/console
sleep 0.1
setleds -D +caps < /dev/console
sleep 0.1
setleds -D -caps < /dev/console
sleep 0.1
done
然后执行以下操作:
sudo lights_infinity.sh
-k
(如果您想取消 sudo 的 15 分钟时间范围但不需要则添加)
您需要“退出”的原因是由于您使用了“sudo su”。这会打开您需要“退出”的额外 shell。
- 额外:检查文件开头的“root”。如果运行 15 分钟,可能会出错(不确定);如果是这样,请将“sudo”添加到“setleds”,它将停止并询问密码。
- extra2:使用函数时,3 次“setleds -D +(/-)caps < /dev/console sleep 0.1”看起来会更好。如果 while 循环的退出方式比 control-x 更好,那么它看起来会更好。