我在 bash 中编写了一个小“守护进程”,如果检测到它们,它将切换到耳机,如果没有,则切换到带有 PulseAudio 的外部 USB 扬声器。
我正在寻找的是某种方式来获取文件更改的通知/proc/asound/card0/codec#0
,就像inotifywait
在真实文件上一样(将 /proc 下的文件视为“伪文件”)。
我找到我的代码有点疯狂,因为它运行sleep 1
与awk
整个一天,也就是86400次,每天:)
while sleep 1; do
_1=${_2:-}
_2=$(awk '/Pin-ctls/{n++;if(n==4)print}' '/proc/asound/card0/codec#0')
[[ ${_1:-} = $_2 ]] ||
if [[ $_2 =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是类似的东西(这个例子不起作用):
codec=/proc/asound/card0/codec#0
while inotifywait $codec; do
if [[ $(awk '/Pin-ctls/{n++;if(n==4)print}' $codec) =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
Run Code Online (Sandbox Code Playgroud)
这样,只有在$codec
文件发生实际更改时,才会运行循环内的命令。