#!/usr/bin/env bash # # shoal(1) -- Print all the non-wildcard Host names (first one per line) from # an ssh_config(5) file, defaulting to $HOME/.ssh/config. # # Author: Tom Ryder # Copyright: 2014 # License: Public domain # # Start by assuming we should parse all hosts declare -i shoal shoal=1 # Iterate through the config while read -r option value _ ; do # "### shoal" and "### noshoal" toggles parsing case $option in '###') case $value in noshoal) shoal=0 ;; shoal) shoal=1 ;; esac ;; 'Host') if ((shoal)) && [[ $value != *[^[:alnum:]_-]* ]] ; then printf '%s\n' "$value" fi ;; esac done < "${1:-$HOME/.ssh/config}"