#!/usr/bin/bash dostuff(){ sinks=$(pactl list sink-inputs \ | grep -e "Sink Input" \ | sed 's/Sink Input #//') names=$(pactl list sink-inputs \ | sed 's/"//g' \ | sed 's/application-name://' \ | grep -e "application.name" \ | sed 's/application.name = //' \ | sed 's/\t\t//' ) vols=$(pactl list sink-inputs \ | grep -e "Volume:" \ | sed 's/Volume: front-left: //' \ | sed 's/front-right: //' \ | sed 's/front-right: //' \ | tr " " "\n" \ | grep -e % \ | sed 's/%//g') icons=$(pactl list sink-inputs \ | grep -e 'application.icon_name' \ | sed 's/\t//g' \ | sed 's/application.icon_name = //g') # echo "-=-=-=-=-=-=-=-=- Debug: Raw value -=-=-=-=-=-=-=-=-" # echo "$sinks" # echo "$names" # echo "$vols" IFS=$'\n' sinkarr=($(echo "$sinks")) namearr=($(echo "$names")) volarr=($(echo "$vols")) # Functions sanitize() { echo "$1" | sed 's/"/\"/g' } geticon() { # notify-send "${volarr[$((i*2))]}" if ["${volarr[$(($1*2))]}" -eq "0"]; then echo "" else echo "" fi } # Print final JSON printf '[' for i in "${!sinkarr[@]}"; do if [ $i -ne 0 ]; then printf ', ' fi # echo -n '{''"sink": "'"${sinkarr[$i]}"'", "name": "'"${namearr[$i]}"', "icon": "'"$(geticon $i)"'", "volume": "'"${volarr[$((i*2))]}"'"}' echo -n '{''"sink": "'"${sinkarr[$i]}"'", "name": "'"${namearr[$i]}"'", "volume": "'"${volarr[$((i*2))]}"'"}' # printf "\n" done printf ']\n' # echo "$sinks" # echo "$names" # echo "$vols" } dostuff pactl subscribe | rg --line-buffered "change" | while read -r _; do dostuff done