2

我正在尝试为运行 chrunchbang linux 的笔记本电脑设置一个硬件静音按钮,我的关键事件处理工作正常并指向这样的脚本:

curvol=$(amixer get Master | grep 'off')
if ["$curvol" != ""]
then
amixer set Master unmute 
else
amixer set Master mute
fi

按下分配的按钮会发生什么,如果静音,它将取消静音;但如果它尚未静音,它不会静音。

我认为问题出在我检查命令输出的 if 语句中;无论 if 是否返回 true,它似乎总是在取消静音。

任何帮助将不胜感激!提前致谢。

4

4 回答 4

3

[是命令的名称(有时是内置的 shell)。您需要在它后面留一个空间才能使其工作:

if [ "$curvol" != "" ]
于 2013-01-09T01:25:47.220 回答
2

可以使用 grep 的返回值:

amixer get Master | grep 'off' &> /dev/null
if [ $? -eq 0 ] 
then
  amixer set Master unmute 
else
  amixer set Master mute
fi
于 2013-01-09T01:25:32.883 回答
2

似乎只写会简单得多:

amixer set Master ${curvol:+un}mute

这相当于:

if test -n "$curvol"; then
  amixer set Master unmute
else
  amixer set Master mute
fi

但不那么罗嗦。另外,请注意,通过使用test而不是[,语法错误变得更加难以产生。

于 2013-01-09T03:12:37.847 回答
0

你可以在 Python 中做到这一点。我添加了一个 BASH 函数来切换静音状态。把它贴在 ~/.bashrc

我目前正在使用笔记本电脑,所以我没有多个声卡。
我没有做任何错误检查。

有关更多示例代码,请参阅 /usr/share/doc/python-alsaaudio/examples/mixertest.py。

# toggle Master mute                                            
function tm(){
python -c "                                                     
import alsaaudio                                                

mixerObj = alsaaudio.Mixer()                                    
currentMute = mixerObj.getmute()[0]                             
newMute = not currentMute                                       
mixerObj.setmute(newMute)                                       
"
}
于 2013-09-05T18:07:16.793 回答