我希望有关于音量和亮度变化的通知。我使用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
? 。因此,任何时候都只能看到一个通知。
答案 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 '[]'))"