notify-send volume popup替换自己

时间:2018-01-09 09:24:11

标签: shell zsh

我希望有关于音量和亮度变化的通知。我使用amixer部分和notify-send部分将命令拼接在一起。这两部分工作孤立但不在一起。我认为它与单引号如何结束ZSH行或shell如何解释引用有关,但我没有找到答案。

notify-send --expire-time=50 "Volume $(printf %.0f%% $(amixer get Master | awk '$0~/%/{print $4}' | tr -d '[]'))" 

退出
  

zsh:错误的数学表达式:操作数预期在字符串结尾处。

另外,如何让通知替换为notify-send? 。因此,任何时候都只能看到一个通知。

1 个答案:

答案 0 :(得分:1)

问题出在你的printf语句中。您正在向请求数字的printf语句发送一个字符串(例如"50%")。这导致bad math expression中的zsh有点神秘:

[zsh]$ printf %.0f 50.0%
zsh: bad math expression: operand expected at `'
0%    

bash下,您会收到一个更容易理解的错误:

[bash]$ printf %.0f 50.0%
bash: printf: 50.0%: invalid number

amixer命令的输出完全返回这样的字符串。您需要做的就是更新printf格式说明符以输出字符串。

[zsh]$ printf %s 50.0%  
50.0%  

这意味着以下内容适合您:

notify-send --expire-time=50 "Volume $(printf %s $(amixer get Master | awk '$0~/%/{print $4}' | tr -d '[]'))"