xbindkeys 转义引号

xbindkeys 转义引号

我该如何转义 .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 ,我认为您需要更改pacmdpactl,因为手册页说它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"

相关内容