.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の音量レベルを上げます)
ここには2つの別々の問題があり、両方に対処しようと思います。
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で問題なく動作するので、問題は他の場所にあると思います。
-v
オプションを指定してxbindkeys
を実行してみてください。これにより、xbindkeys
がフォアグラウンドで実行され、端末でエラーを確認できます。
私の場合、根本的な原因は悪い引用ではないことを示していますが、pacmd
はエラーを出します
...
No PulseAudio daemon running, or not running as session daemon.
しかし、PulseAudioが機能している場合は、pacmd
をpactl
に変更する必要があると思います。これは、マニュアルページにpacmd
は引数を取らないと書かれているためです。この目的のためにpactl
を使用するWebショー。
回避策として、コマンドラインに表示されるようにエスケープされていないコマンドを使用してシェルスクリプト〜/ 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"