用于加载/卸载 pulseaudio 模块的 Bash 脚本

用于加载/卸载 pulseaudio 模块的 Bash 脚本

我想创建一个 bash 脚本,pulseaudio当环回模块尚未打开时加载它,反之亦然,当环回模块已在运行时卸载它。

到目前为止,我只能编写以下脚本

#!/bin/bash

MODULE_SEARCH=$(pactl list modules | grep -E "module-loopback")
echo $MODULE_SEARCH

if [ "$MODULE_SEARCH" = "Name: module-loopback" ]
  then pactl unload-module module-loopback
fi
if [ "$MODULE_SEARCH" = "" ]
  then pactl load-module module-loopback latency_msec=15
fi

但它不能按预期工作,因为它打开了模块,但无法识别模块是否正在运行并将其关闭

答案1

它可能不起作用,因为您的 grep 返回包含搜索模式的整行。尽管您已尝试通过在测试Name:中添加前缀来实现这一点[ ... ],但您可能缺少一些前导空格。

对于类似这样的情况,使用 grep 的退出状态几乎总是更好的。

if pactl list modules | grep -qF "module-loopback"; then 
  pactl unload-module module-loopback
else
  pactl load-module module-loopback latency_msec=15
fi

grep -q匹配时以状态 0(真)静默退出,不匹配时以状态 1(假)退出。开关-F只是使其成为固定字符串而不是正则表达式匹配 - 您在这里不需要正则表达式,绝对不需要-E扩展正则表达式。

相关内容