xbindkeys citas de escape

6

¿Cómo puedo escapar de las comillas en los comandos .xbindkeysrc? Ninguno de esos trabajos.

"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)}'"

(Los comandos aumentan el nivel de volumen de PulseAudio)

Danilo Bargen
fuente

Respuestas:

6

Hay dos problemas separados aquí, y trataré de abordar ambos.

El primero es cómo citar correctamente un comando en .xbindkeysrc.

Todo lo que tiene que hacer es tomar un comando que funcione bashy luego poner comillas dobles a su alrededor.

Por ejemplo, para un comando con un espacio en él, tendría que ejecutar

"/home/user/My Programs/progname"

o

/home/user/My\ Programs/progname

en bash.

Lo que significa que necesitas

""/home/user/My Programs/progname""

o

"/home/user/My\ Programs/progname"

en su .xbindkeysrc.

Técnicamente, lo que sucede es que xbindkeys elimina el par más externo de comillas dobles, luego ejecuta la cadena restante con sh -c.


En su ejemplo, el comando

pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'

funciona bien en bash, así que creo que el problema está en otra parte.

Intente ejecutar xbindkeyscon la -vopción, que hace que se xbindkeysejecute en primer plano, para que pueda ver cualquier error en su terminal.

En mi caso, muestra que la causa subyacente no es una mala cita, sino pacmdun error

...
No PulseAudio daemon running, or not running as session daemon.

pero si tiene PulseAudio funcionando, creo que necesita cambiar pacmda pactl, porque la página del manual dice que pacmdno toma argumentos, y varios otros ejemplos en la web muestran pactlpara este propósito.

Mikel
fuente
2
Gracias, poner el comando entre comillas dobles sin escapar funcionó en absoluto :)
Danilo Bargen
4

Como solución alternativa, cree un script de shell ~ / bin / mychangevolume con los comandos sin escape como aparecerían en la línea de comandos. Algo como

#!/bin/bash
incr=$1
pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3'$incr')}'"

Luego llame a este script desde .xbindkeysrc

"mychangevolume +2500"
David Andersson
fuente