nic*_*ole 5 bash shell scripting sh echo
我是新来bash和尝试写禁用kworker业务在aMaia的回答脚本这里.
到目前为止,我有这个,我从root运行:
1 #!/bin/bash
2
3 cd /sys/firmware/acpi/interrupts
4 for i in gpe[[:digit:]]* # Don't mess with gpe_all
5 do
6 num=`awk '{print $1}' $i`
7 if (( $num >= 1000 )); then # potential CPU hogs?
8 # Back it up and then disable it!!
9 cp $i /root/${i}.backup
10 echo "disable" > $i
11 fi
12 done
Run Code Online (Sandbox Code Playgroud)
但运行它会导致:
./kkiller: line 10: echo: write error: Invalid argument
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我以为$i只是文件名,这似乎是echo的正确语法.
一般来说,清理/改进脚本的建议也很受欢迎!
更新:set -vx添加到脚本的顶部,这是一个有问题的迭代:
+ for i in 'gpe[[:digit:]]*'
awk '{print $1}' $i
++ awk '{print $1}' gpe66
+ num=1024908
+ (( 1024908 >= 1000 ))
+ cp gpe66 /root/gpe66.backup
+ echo disable
./kkiller: line 10: echo: write error: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我在Alpine Linux环境中的Docker中也遇到了这个问题.我认为问题是默认情况下echo在字符串的末尾添加换行符,而内核不接受它,但在每个系统中都不是这样.在Docker中我遇到了这个错误,但是尽管出现了错误消息,仍然写入了该值.
将该溶液(在击): echo -n disable >/sys/firmware/acpi/interrupts/gpe66.这样就不会回应换行符.
小智 0
我认为这与权限有关。我认为默认情况下 root 没有对这些文件的写入权限。尝试手动回显“禁用”该文件,即使作为 root 也会显示相同的错误。因此,为了使你的脚本正常工作,首先在 echo 之前对 $i 执行 chmod 744 ,它应该可以解决问题。