我该如何转义 .xbindkeysrc 命令中的引号?这些都不起作用。
"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'"
"pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/{system ("pacmd "\$1" "\$2" "\$3+2500)}'"
"pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/{system (\"pacmd \"\$1\" \"\$2\" \"\$3+2500)}'"
"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system (\"pacmd \"$1\" \"$2\" \"$3+2500)}'"
(该命令会提高 PulseAudio 音量)
答案1
这里有两个独立的问题,我将尽力解决它们。
首先是如何在 中正确引用命令.xbindkeysrc
。
您所要做的就是采取一个在 中起作用的命令bash
,然后将其括在双引号中。
例如,对于带有空格的命令,您必须运行
"/home/user/My Programs/progname"
或者
/home/user/My\ Programs/progname
在bash
。
这意味着你需要
""/home/user/My Programs/progname""
或者
"/home/user/My\ Programs/progname"
在你的.xbindkeysrc
。
从技术上讲,发生的情况是 xbindkeys 删除最外面的一对双引号,然后使用 运行剩余的字符串sh -c
。
在您的示例中,命令
pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'
在 bash 中运行良好,所以我认为问题出在其他地方。
尝试xbindkeys
使用该-v
选项运行,它使其xbindkeys
在前台运行,这样您就可以在终端上看到任何错误。
就我而言,这表明根本原因不是引用错误,而是pacmd
给出错误
...
No PulseAudio daemon running, or not running as session daemon.
但是如果您已经使用 PulseAudio ,我认为您需要更改pacmd
为pactl
,因为手册页说它pacmd
不接受参数,并且网络上的其他几个示例显示使用pactl
来实现此目的。
答案2
解决方法是创建一个 shell 脚本 ~/bin/mychangevolume,其中的命令未转义,就像它们在命令行中显示的那样。例如
#!/bin/bash
incr=$1
pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3'$incr')}'"
然后从 .xbindkeysrc 调用此脚本
"mychangevolume +2500"