# mysql(1) completion -*- shell-script -*- _mysql_character_sets() { local IFS=$' \t\n' reset=$(shopt -p failglob) shopt -u failglob local -a charsets=(/usr/share/m{ariadb,ysql}/charsets/*.xml) $reset charsets=("${charsets[@]##*/}") charsets=("${charsets[@]%%?(Index|\*).xml}" utf8) COMPREPLY+=($(compgen -W '${charsets[@]}' -- "$cur")) } _mysql() { local cur prev words cword split _init_completion -s || return case $prev in --user | -!(-*)u) COMPREPLY=($(compgen -u -- "$cur")) return ;; --database | -!(-*)D) COMPREPLY=($(compgen -W "$(mysqlshow 2>/dev/null | command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')" -- "$cur")) return ;; --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --default-character-set) _mysql_character_sets return ;; --character-sets-dir | --ssl-capath) _filedir -d return ;; --socket | -!(-*)S) _filedir sock return ;; --protocol) COMPREPLY=($(compgen -W 'tcp socket pipe memory' -- "$cur")) return ;; --defaults-file | --defaults-extra-file | --tee) _filedir return ;; --ssl-ca | --ssl-cert) _filedir '@(pem|cer|c?(e)rt)' return ;; --ssl-key) _filedir '@(pem|key)' return ;; --port | --set-variable | --ssl-cipher | --connect_timeout | \ --max_allowed_packet | --prompt | --net_buffer_length | --select_limit | \ --max_join_size | --server-arg | --debug | --delimiter | --execute | --pager | \ -!(-*)[Pe]) return ;; --help | --version | -!(-*)[?IV]) return ;; esac $split && return case $cur in --*) local help=$(_parse_help "$1") help+=" --skip-comments --skip-ssl" COMPREPLY=($(compgen -W "$help" -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace return ;; # only complete long options -) compopt -o nospace COMPREPLY=(--) return ;; esac COMPREPLY=($(compgen -W \ "$(mysqlshow 2>/dev/null | command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')" \ -- "$cur")) } && complete -F _mysql mysql # ex: filetype=sh