xbindkeys Fluchtzitate

867
Danilo Bargen

Wie kann ich Anführungszeichen in .xbindkeysrc-Befehlen schützen? Keine dieser Arbeiten.

"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/'"  "pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/'"  "pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/'"  "pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/'" 

(Die Befehle erhöhen die PulseAudio-Lautstärke.)

4

2 Antworten auf die Frage

4
David Andersson

Erstellen Sie als Problemumgehung ein Shell-Skript ~ / bin / mychangevolume mit den Befehlen, die nicht mit Escape-Zeichen versehen sind, wie sie in der Befehlszeile erscheinen würden. So etwas wie

#!/bin/bash incr=$1 pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/'" 

Dann rufen Sie dieses Skript von .xbindkeysrc auf

"mychangevolume +2500" 
4
Mikel

Hier gibt es zwei verschiedene Probleme, und ich werde versuchen, beide anzusprechen.

Der erste ist, wie man einen Befehl korrekt in zitiert .xbindkeysrc.

Alles, was Sie tun müssen, ist, einen Befehl anzunehmen, der funktioniert bash, und ihn dann in doppelte Anführungszeichen zu setzen.

Für einen Befehl mit einem Leerzeichen müssten Sie beispielsweise ausführen

"/home/user/My Programs/progname" 

oder

/home/user/My\ Programs/progname 

in bash.

Was bedeutet, dass Sie brauchen

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

oder

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

in deiner .xbindkeysrc.

Technisch passiert, dass xbindkeys das äußerste Paar doppelter Anführungszeichen entfernt und dann die verbleibende Zeichenfolge mit verwendet sh -c.


In Ihrem Beispiel der Befehl

pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/' 

funktioniert gut in bash, also denke ich, das problem ist woanders.

Versuchen Sie, xbindkeysdie -vOption xbindkeysauszuführen, die im Vordergrund ausgeführt wird, damit Sie Fehler auf Ihrem Terminal sehen können.

In meinem Fall zeigt es, dass die zugrunde liegende Ursache keine schlechte Quotierung ist, sondern pacmdeinen Fehler angibt

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

aber wenn Sie Pulseaudio arbeiten, ich glaube, Sie ändern müssen pacmdzu pactl, weil der Mann Seite sagt, dass pacmdkeine Argumente übernimmt, und einige andere Beispiele auf der Web - Show mit pactlfür diesen Zweck.

Danke, den Befehl in doppelte Anführungszeichen setzen, ohne dass ein Fluchtweg funktioniert hat :) Danilo Bargen vor 11 Jahren 1