# bash completion for ipmitool -*- shell-script -*- proc _ipmitool_singleline_help { setvar COMPREPLY = ''( $( compgen -W "$( $1 $2 2>&1 | \ sed -ne 's/[,\r]//g' -e 's/^.*[Cc]ommands://p' )" -- "$cur" ) ) } proc _ipmitool { local cur prev words cword _init_completion || return case (prev) { -h|-V|-p|-U|-e|-k|-y|-P|-m|-b|-t|-B|-T|-l { return 0 } -d { setvar COMPREPLY = ''( $( compgen -W "$( \ command ls -d /dev/ipmi* /dev/ipmi/* /dev/ipmidev/* \ 2>/dev/null | sed -ne 's/^[^0-9]*\([0-9]\{1,\}\)/\1/p' )" \ -- "$cur" ) ) return 0 } -I { setvar COMPREPLY = ''( $( compgen -W "$( $1 -h 2>&1 | \ sed -e '/^Interfaces:/,/^[[:space:]]*$/!d' \ -ne 's/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*/\1/p' )" \ -- "$cur" ) ) return 0 } -H { _known_hosts_real $cur return 0 } -f|-S|-O { _filedir return 0 } -C { setvar COMPREPLY = ''( $( compgen -W '{0..14}' -- "$cur" ) ) return 0 } -L { setvar COMPREPLY = ''( $( compgen -W 'CALLBACK USER OPERATOR ADMINISTRATOR' \ -- "$cur" ) ) return 0 } -A { setvar COMPREPLY = ''( $( compgen -W 'NONE PASSWORD MD2 MD5 OEM' -- "$cur" ) ) return 0 } -o { setvar COMPREPLY = ''( $( compgen -W "$( $1 -o list 2>&1 | \ awk '/^[ \t]+/ { print $1 }' ) list" -- "$cur" ) ) return 0 } } if [[ "$cur" == -* ]] { setvar COMPREPLY = ''( $( compgen -W '$( _parse_help "$1" -h)' -- "$cur" ) ) return 0 } # Find out command and subcommand local cmds=( raw i2c spd lan chassis power event mc sdr sensor fru gendev sel pef sol tsol isol user channel session sunoem kontronoem picmg fwum firewall shell exec set hpm ekanalyzer) local i c cmd subcmd for (( i=1; i < ${#words[@]}-1; i++ )); do [[ -n $cmd ]] && subcmd=${words[i]} && break for c in ${cmds[@]}; do [[ ${words[i]} == $c ]] && cmd=$c && break done done if [[ -z $cmd ]] { setvar COMPREPLY = ''( $( compgen -W '${cmds[@]}' -- "$cur" ) ) return 0 } # Command/subcommand completions case (cmd) { shell { } exec { _filedir } chassis|power|kontronoem|fwum { _ipmitool_singleline_help $1 $cmd } lan { case (subcmd) { print|set { } alert { [[ $prev == alert ]] && \ setvar COMPREPLY = ''( $( compgen -W 'print set' -- "$cur" ) ) } stats { [[ $prev == stats ]] && \ setvar COMPREPLY = ''( $( compgen -W 'print set' -- "$cur" ) ) } * { setvar COMPREPLY = ''( $( compgen -W 'print set alert stats' \ -- "$cur" ) ) } } } sdr { case (subcmd) { get|info|type|list|entity { } elist { setvar COMPREPLY = ''( $( compgen -W 'all full compact event mclog fru generic' -- "$cur" ) ) } dump { _filedir } fill { case (prev) { fill { setvar COMPREPLY = ''( $( compgen -W 'sensors file' \ -- "$cur" ) ) } file { _filedir } } } * { setvar COMPREPLY = ''( $( compgen -W 'get info type list elist entity dump fill' -- "$cur" ) ) } } } sensor { case (subcmd) { list|get|thresh { } * { setvar COMPREPLY = ''( $( compgen -W 'list get thresh' -- "$cur" ) ) } } } sel { case (subcmd) { info|clear|list|elist|delete { } add|save|writeraw|readraw { _filedir } time { [[ $prev == time ]] && \ setvar COMPREPLY = ''( $( compgen -W 'get set' -- "$cur" ) ) } * { setvar COMPREPLY = ''( $( compgen -W 'info clear list elist delete add get save writeraw readraw time' -- "$cur" ) ) } } } user { case (subcmd) { summary|list|disable|enable|priv|test { } set { [[ $prev == set ]] && \ setvar COMPREPLY = ''( $( compgen -W 'name password' -- "$cur" ) ) } * { setvar COMPREPLY = ''( $( compgen -W 'summary list set disable enable priv test' -- "$cur" ) ) } } } set { [[ $prev == set ]] && \ setvar COMPREPLY = ''( $( compgen -W 'hostname username password privlvl authtype localaddr targetaddr port csv verbose' \ -- "$cur" ) ) } } } && complete -F _ipmitool ipmitool # ex: ts=4 sw=4 et filetype=sh