#!/bin/bash declare -A ports ports[pulsel]='PulseAudio JACK Sink:front-left' ports[pulser]='PulseAudio JACK Sink:front-right' ports[echo_audiofire1]='firewire_pcm:001486a296a59815_Unknown_out' ports[echo_audiofire2]='firewire_pcm:001486a296a59815_Unknown0_out' retries=10 err_file="$(mktemp)" while [[ "$retries" -gt 0 ]]; do failed=false live_ports="$(jack_lsp -c 2>"$err_file")" printf 'live ports:\n\n%s\n' "$live_ports" err="$(<"$err_file")" rm "$err_file" if [[ -n "$err" ]]; then printf '%s\n' "$err" >&2 sleep 2 ((retries-=1)) continue fi for port in "${ports[@]}"; do if ! grep -q "$port" <<< "$live_ports"; then printf '%s not seen\n' "$port" >&2 sleep 2 ((retries-=1)) failed=true fi done if [[ "$failed" == 'false' ]]; then break fi done jack_connect "${ports[pulsel]}" "${ports[echo_audiofire1]}" jack_connect "${ports[pulser]}" "${ports[echo_audiofire2]}" printf 'success\n' if [[ "$retries" != 10 ]]; then printf 'attempts: %s\n' "$((10-retries))" fi