2017-02-01 22 views
0

I volnoti verwenden, einen Benachrichtigungsdienst, zusammen mit meinem i3 Window-Manager, in meiner i3config Datei Ich habe versucht, die Befehle für volnoti wie folgt umzusetzen:Shell-Befehl funktioniert nicht

# Pulse Audio controls 
# Increase sound volume 
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 1 +5% && pkill -RTMIN+1 i3blocks && volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*') 
# Decrease sound volume 
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 1 -5% && pkill -RTMIN+1 i3blocks && volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*') 
# Mute sound 
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 1 toggle && pkill -RTMIN+1 i3blocks && if [[ -n $(amixer -c 1 -M -D pulse get Master | grep '\[off\]' -m 1) ]]; then volnoti-show -m; else volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*'); fi 

Erhöhen und Erniedrigen gezeigt ohne Probleme, aber wenn ich den Ton i3 Protokolle dieser Fehler stumm:

ERROR: Could not translate string to key symbol: "split+h" 
[libi3] ERROR: Surface 0x555ee0dfd3b0 is not initialized, skipping drawing. 
[libi3] ERROR: Surface 0x555ee0dfd3b0 is not initialized, skipping drawing. 
[libi3] ERROR: Surface 0x555ee0dfd3b0 is not initialized, skipping drawing. 
ERROR: Received ConfigureNotify for unknown window 0x00800000 
ERROR: Received ExposeEvent for unknown window 0x00800000 
ERROR: Received ConfigureNotify for unknown window 0x00800000 
ERROR: Received ConfigureNotify for unknown window 0x00800003 
ERROR: Received ConfigureNotify for unknown window 0x00800003 
ERROR: Received ConfigureNotify for unknown window 0x00800006 
ERROR: Received ConfigureNotify for unknown window 0x00800006 
ERROR: Received ConfigureNotify for unknown window 0x00800009 
ERROR: Received ConfigureNotify for unknown window 0x00800009 
ERROR: Received ConfigureNotify for unknown window 0x0080000c 
ERROR: Received ConfigureNotify for unknown window 0x0080000c 
ERROR: Expected one of these tokens: <end>, '[', 'move', 'exec', 'exit', 'restart', 'reload', 'shmlog', 'debuglog', 'border', 'layout', 'append_layout', 'workspace', 'focus', 'kill', 'open', 'fullscreen', 'sticky', 'split', 'floating', 'mark', 'unmark', 'resize', 'rename', 'nop', 'scratchpad', 'title_format', 'mode', 'bar' 
ERROR: Your command: exec --no-startup-id pactl set-sink-mute 1 toggle && pkill -RTMIN+1 i3blocks && "if [[ -n $(amixer -c 1 -M -D pulse get Master | grep '\[off\]' -m 1) ]]; then volnoti-show -m; else volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*'); fi" 
ERROR:                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

ich muss zugeben, es ist nicht die eleganteste Lösung. Aber es funktioniert, bis auf die letzte Zeile. Wenn ich den letzten Teil direkt in einem Terminal ausführen, es funktioniert gut und stumm ist richtig erkannt:

if [[ -n $(amixer -c 1 -M -D pulse get Master | grep '\[off\]' -m 1) ]]; then volnoti-show -m; else volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*'); fi 
+0

können Sie bitte den Downvote erklären? – Jonas

Antwort

1

viele Fallen Es gibt, wenn komplexe Shell-Befehle innerhalb der i3 Konfiguration. i3 verwendet bestimmte Sonderzeichen als syntaktische Elemente, bietet jedoch keine vollständige Möglichkeit, sie zu zitieren. In diesem Fall i3 interpretiert die ; als i3 Befehlsseparator und erwartet, dass es von einem i3 Befehl gefolgt wird, die then nicht.


Sie können versuchen, den vollständigen Befehlsteil in doppelte Anführungszeichen zu setzen, z.

bindsym XF86AudioMute exec --no-startup-id "pactl set-sink-mute 1 toggle && pkill -RTMIN+1 i3blocks && if [[ -n $(amixer -c 1 -M -D pulse get Master | grep '\[off\]' -m 1) ]]; then volnoti-show -m; else volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*'); fi" 

Dies kann oder kann nicht funktionieren. (Und in der Fehlermeldung sieht es aus wie Sie bereits versucht, einen Teil des Befehls zu zitieren)


Eine bessere Möglichkeit, Probleme zu lösen, wie dies in der Regel ist den Shell-Code in ein Skript zu setzen und bindet nur, dass zu eine Abkuerzung.

Skript, z.B. volcontrol.sh:

#!/bin/sh 
# Pulse Audio controls 
case $1 in 
    raise) 
    # Increase sound volume 
    pactl set-sink-volume 1 +5% && pkill -RTMIN+1 i3blocks && volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*') 
    ;; 
    lower) 
    # Decrease sound volume 
    pactl set-sink-volume 1 -5% && pkill -RTMIN+1 i3blocks && volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*') 
    ;; 
    mute) 
    # Mute sound 
    pactl set-sink-mute 1 toggle && pkill -RTMIN+1 i3blocks && if [[ -n $(amixer -c 1 -M -D pulse get Master | grep '\[off\]' -m 1) ]]; then volnoti-show -m; else volnoti-show $(amixer -c 1 -M -D pulse get Master | grep -o '[0-9]*%' -m 1 | grep -o '[0-9]*'); fi 
    ;; 
esac 

i3 Config

# Pulse Audio controls 
# Increase sound volume 
bindsym XF86AudioRaiseVolume exec --no-startup-id /path/to/volcontrol.sh raise 
# Decrease sound volume 
bindsym XF86AudioLowerVolume exec --no-startup-id /path/to/volcontrol.sh lower 
# Mute sound 
bindsym XF86AudioMute exec --no-startup-id /path/to/volcontrol.sh mute 

Diese alle Probleme mit i3 Mißverständnis für Konfigurationseinstellungen Shell-Code vermeidet und ermöglicht so für mehr Flexibilität, vor allem, wenn mehrere Shell-Befehle verketten oder mehr verwenden komplexe Schalenkontexte.

Verwandte Themen