需要 root 的 Bash 脚本仅在我键入 exit 时运行!

Ubu*_*ver 0 permissions command-line bash scripts

我已经成功制作了一个需要 root 权限的 bash 脚本,我可以以 root 身份运行!但是,该脚本仅在我以 root 用户身份使用终端时运行,如果我键入 exit,它就会运行。当我输入:

bash lights_infinity.sh
Run Code Online (Sandbox Code Playgroud)

终端什么都不做。为什么会这样,是否正常?代码是

#!/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
Run Code Online (Sandbox Code Playgroud)

我需要删除 sudo 命令吗?

Rin*_*ind 5

我会

#!/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
Run Code Online (Sandbox Code Playgroud)

并这样做:

sudo lights_infinity.sh
Run Code Online (Sandbox Code Playgroud)

(添加-k如果您想取消 sudo 的 15 分钟时间范围但不应该需要)


您需要“退出”的原因是由于您使用了“sudo su”。这会打开一个您需要“退出”的额外外壳。


  • 额外:检查文件开头的“root”。如果这运行了 15 分钟,它可能会出错(不确定);如果是这样,将“sudo”添加到“setleds”,它会停止并询问密码。
  • extra2:使用函数时,3 次“setleds -D +(/-)caps < /dev/console sleep 0.1”看起来更好。如果 while 循环的退出比 control-x 更好,那么它看起来会更好。