at master 636 B view raw
1#!/usr/bin/env bash 2 3sink_ids=($(pactl list short sinks | cut -f 1)) 4sinks=($(pactl list short sinks | cut -f 2)) 5 6default_sink=$(pactl info | sed -En 's/Default Sink: (.*)/\1/p') 7 8for i in "${!sinks[@]}"; do 9 if [[ "${sinks[$i]}" = "${default_sink}" ]]; then 10 break 11 fi 12done 13 14if [[ "$1" == "back" ]]; then 15 j=-1 16else 17 j=1 18fi 19 20prev_i=$i 21 22while true; do 23 i=$(((i+j)%${#sinks[@]})) 24 echo $i 25 if ! pactl list sinks | sed -n "/Sink #${sink_ids[$i]}/,\$p" | grep "\[Out\]" | head -n 1 | grep "not available"; then 26 pactl set-default-sink "${sinks[$i]}" 27 break 28 fi 29 # break if no other sink 30 if [ $prev_i -eq $i ]; then 31 break 32 fi 33done 34