我正在为我的平板电脑编写bash脚本,根据Manjaro中的文件来翻转屏幕。我的当前脚本如下:
while true
do
state=$(cat /sys/devices/platform/thinkpad_acpi/hotkey_tablet_mode) #This file indicates if it's in tablet mode or not
if [[ $state == 0 && $oldState == 1 ]]
then
xrandr --output LVDS1 --rotate normal
xsetwacom --set "$a" Rotate none
xsetwacom --set "$b" Rotate none
xsetwacom --set "$c" Rotate none
oldState=0
elif [[ $state == 1 && $oldState == 0 ]]
then
xrandr --output LVDS1 --rotate inverted
xsetwacom --set "$a" Rotate half
xsetwacom --set "$b" Rotate half
xsetwacom --set "$c" Rotate half
oldState=1
/home/eto/scripts/backlight 0
fi
sleep 1s
doneif语句中的代码并不重要,但我担心的是它检查平板模式的整个逻辑。是否有更好的方法来检查平板模式指示文件而不是while循环?我觉得这是一种非常低效率的方法,因为它经常读取磁盘,但我不知道如何才能这样做。任何输入都是非常感谢的,因为我是一个非常业余的编码。
发布于 2019-10-13 22:18:20
到目前为止,我喜欢你所做的大部分工作:
[[ (双方括号)是一种很好的做法。$()代替经典的backticks命令替换也是一种很好的现代shell实践。有些小事情我会改进的:
#!行thens添加到前面一行的末尾,比如if [[ cond ]]; then。您的外部循环也可以作为while true; do执行。脚本每秒钟都会被调用,并占用一定数量的CPU。在这种情况下,可能没有多少CPU被烧毁,但有一件事要考虑的是,这种轮询是否可以避免。Linux将inotify作为一个函数,让进程在文件更改时知道,这样他们就不必不断地检查文件本身。这在shell中可以通过inotifywait获得。如果您正在检查的文件与inotifywait一起工作,则可以避免使用sleep。
除了节省CPU不跳过sleep之外,还有一个好处是脚本应该以较低的延迟运行。您的脚本将在一小部分秒内调用,而不需要等待多达一秒才能检测到更改。
https://codereview.stackexchange.com/questions/230649
复制相似问题