Bash 脚本中的 Sudo 命令会暂停脚本

Bash 脚本中的 Sudo 命令会暂停脚本

我有一台 2009 年初的 iMac,传感器有问题。ODD 和 CPU 风扇全速运转。为了在 Ubuntu 中将它们降至最低速度,我需要在终端中设置速度,使用此方法。我编写了一个 bash 脚本来帮我完成这个操作,而不是每次启动后都执行这个操作,但是它不起作用。

这是我的脚本:

#!/bin/bash
echo "Beginning script..."
echo "Logging in as root..."
sudo su
cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output
echo "Done."

问题出在“sudo su”上。它提示输入密码,但输入密码后什么也没发生。它只是停止了。

以下是屏幕截图

答案1

脚本暂停是因为sudo su启动了一个新的 shell 进程。原始 shell 进程(即运行脚本的进程)正在等待子 shell 结束。

我建议以 root 权限运行整个脚本,而不是要求脚本本身以 root 身份登录。从sudo su代码中删除部分内容并运行脚本,如下所示:

$ sudo ./yourscript

这是常见的做法。请注意,系统管理脚本(例如)update-grub不要求输入 root 密码 - 它们只是需要以 root 身份运行。

答案2

你可以把交互式的东西拿出来,然后把这些线复制/etc/rc.local# 默认情况下,该脚本不执行任何操作。出口 0线

sudo nano /etc/rc.local

插入编辑的脚本..

cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output

CtloEnter 将保存文件

Ctlx 将退出nano

这样,它就会在您启动时执行。

答案3

该命令sudo su会创建一个新的 shell 会话。它正在等待您输入命令。它是不是将执行该行之后的命令。

您有 2 个选择:

sudo su1)在单独的脚本中提取命令并使用 sudo 运行

2)将以下行echo '1' > fan1_manual改为 echo '1' | sudo tee fan1_manual

相关内容