# bash completion for sysbench # We set -o nospace and turn it off in quite a few places for bash < 4 # reasons; assuming bash >= 4 we could instead not turn it on # initially but only in the few cases where it's actually needed. have sysbench && _sysbench() { COMPREPLY=() local cur prev words split=false _get_comp_words_by_ref -n = cur prev words # long options need the "=" (whitespace split doesn't work), but we split # internally to make processing easier _split_longopt && split=true case $prev in --num-threads|--max-requests|--max-time|--thread-stack-size| \ --help|--version|help|version) return 0 ;; --init-rng|--debug|--validate) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return 0 ;; --test) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'fileio cpu memory threads mutex oltp' \ -- "$cur" ) ) return 0 ;; --cpu-max-prime) return 0 ;; --file-test-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'seqwr seqrewr seqrd rndrd rndwr rndrw' \ -- "$cur" ) ) return 0 ;; --file-io-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'sync async fastmmap slowmmap' \ -- "$cur" ) ) return 0 ;; --file-extra-flags) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'sync dsync direct' -- "$cur" ) ) return 0 ;; --file-fsync-all|--file-fsync-end) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return 0 ;; --file-fsync-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'fsync fdatasync' -- "$cur" ) ) return 0 ;; --memory-scope) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'global local' -- "$cur" ) ) return 0 ;; --memory-hugetlb) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return 0 ;; --memory-oper) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'read write none' -- "$cur" ) ) return 0 ;; --memory-access-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'seq rnd' -- "$cur" ) ) return 0 ;; --oltp-test-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'simple complex nontrx sp' -- "$cur" ) ) return 0 ;; --oltp-read-only|--oltp-skip-trx|--oltp-quto-inc|--mysql-ssl) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) return 0 ;; --oltp-nontrx-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'select update_key update_nokey insert delete' -- "$cur" ) ) return 0 ;; --oltp-dist-type) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'uniform gaussian special' -- "$cur" ) ) return 0 ;; --db-driver) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W "$( $1 --test=oltp help 2>/dev/null | sed -e '/^.*database drivers:/,/^$/!d' \ -ne 's/^ *\([^ ]*\) .*/\1/p' )" -- "$cur" ) ) return 0 ;; --db-ps-mode) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'auto disable' -- "$cur" ) ) return 0 ;; --mysql-socket) compopt +o nospace &>/dev/null _filedir sock return 0 ;; --mysql-table-engine) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'myisam innodb bdb heap ndbcluster federated' -- "$cur" ) ) return 0 ;; --mysql-engine-trx) compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W 'yes no auto' -- "$cur" ) ) return 0 ;; --*) $split && return 0 ;; esac # find out which test we're running local i test for (( i=1 ; $i < ${#words[@]}-1 ; i++ )); do if [[ ${words[i]} == --test* ]]; then test=${words[i]#*=} break fi done local opts="--num-threads= --max-requests= --max-time= --thread-stack-size= --init-rng= --debug= --validate= --help --version" if [[ $test ]]; then local help=( $( _parse_help $1 "--test=$test help" ) ) opts="$opts ${help[@]/%/=} prepare run cleanup help version" else opts="$opts --test=" fi if [[ "$cur" == -* || ! $test ]]; then COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != *= ]] && \ compopt +o nospace &>/dev/null else compopt +o nospace &>/dev/null COMPREPLY=( $( compgen -W "prepare run cleanup help version" \ -- "$cur" ) ) fi } && complete -F _sysbench -o nospace sysbench # Local variables: # mode: shell-script # sh-basic-offset: 4 # sh-indent-comment: t # indent-tabs-mode: nil # End: # ex: ts=4 sw=4 et filetype=sh