仅当我输入 exit 时,才运行需要 root 权限的 Bash 脚本!

仅当我输入 exit 时,才运行需要 root 权限的 Bash 脚本!

我已经成功创建了一个需要 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 更好,那么它看起来会更好。

相关内容