# bash completion for smartctl(8) -*- shell-script -*- _smartctl_quietmode() { COMPREPLY=( $( compgen -W 'errorsonly silent noserial' -- "$cur" ) ) } _smartctl_device() { case $cur in areca*|3ware*|megaraid*|cciss*) COMPREPLY+=( ${cur%%,*},{0..31} ) COMPREPLY=( $( compgen -W '"${COMPREPLY[@]}"' -- "$cur" ) ) ;; hpt*) COMPREPLY+=( hpt,{1..4}/{1..8} hpt,{1..4}/{1..8}/{1..5} ) COMPREPLY=( $( compgen -W '"${COMPREPLY[@]}"' -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "ata scsi sat usbcypress usbjmicron usbsunplus marvell areca 3ware hpt megaraid cciss auto test" \ -- "$cur" ) ) case "${COMPREPLY[@]}" in areca|3ware|hpt|megaraid|cciss) compopt -o nospace ;; esac ;; esac } _smartctl_tolerance() { COMPREPLY=( $( compgen -W 'normal conservative permissive verypermissive' \ -- "$cur" ) ) } _smartctl_badsum() { COMPREPLY=( $( compgen -W 'warn exit ignore' -- "$cur" ) ) } _smartctl_report() { COMPREPLY=( $( compgen -W 'ioctl ataioctl scsiioctl' -- "$cur" ) ) } _smartctl_powermode() { COMPREPLY=( $( compgen -W 'never sleep standby idle' -- "$cur" ) ) } _smartctl_feature() { COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) } _smartctl_log() { COMPREPLY=( $( compgen -W 'error selftest selective directory background sasphy sasphy,reset sataphy sataphy,reset scttemp scttempsts scttemphist scterc gplog smartlog xerror xselftest' -- "$cur" ) ) } _smartctl_vendorattribute() { COMPREPLY=( $( compgen -W 'help 9,minutes 9,seconds 9,halfminutes 9,temp 192,emergencyretractcyclect 193,loadunload 194,10xCelsius 194,unknown 198,offlinescanuncsectorct 200,writeerrorcount 201,detectedtacount 220,temp' -- "$cur" ) ) } _smartctl_firmwarebug() { COMPREPLY=( $( compgen -W 'none samsung samsung2 samsung3 swapid' \ -- "$cur" ) ) } _smartctl_presets() { COMPREPLY=( $( compgen -W 'use ignore show showall' -- "$cur" ) ) } _smartctl_test() { [[ $cur == @(pending|scttempint|vendor), ]] && return 0 COMPREPLY=( $( compgen -W 'offline short long conveyance select, select,redo select,next afterselect,on afterselect,off pending, scttempint, vendor,' -- "$cur" ) ) [[ $COMPREPLY == *, ]] && compopt -o nospace } _smartctl_drivedb() { local prefix= if [[ $cur == +* ]] ; then prefix=+ cur="${cur#+}" fi _filedir h [[ -n $prefix ]] && COMPREPLY=( "${COMPREPLY[@]/#/$prefix}" ) } _smartctl() { local cur prev words cword split _init_completion -s || return case $prev in -q|--quietmode) _smartctl_quietmode ;; -d|--device) _smartctl_device return 0 ;; -T|--tolerance) _smartctl_tolerance return 0 ;; -b|--badsum) _smartctl_badsum return 0 ;; -r|--report) _smartctl_report return 0 ;; -n|--nocheck) _smartctl_powermode return 0 ;; -s|--smart|-o|--offlineauto|-S|--saveauto) _smartctl_feature return 0 ;; -l|--log) _smartctl_log return 0 ;; -v|--vendorattribute) _smartctl_vendorattribute return 0 ;; -F|--firmwarebug) _smartctl_firmwarebug return 0 ;; -P|--presets) _smartctl_presets return 0 ;; -B|--drivedb) _smartctl_drivedb return 0 ;; -t|--test) _smartctl_test return 0 ;; esac $split && return 0 if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--help --version --info --all --xall --scan --scan-open --quietmode= --device= --tolerance= --badsum= --report= --nocheck= --smart= --offlineauto= --saveauto= --health --capabilities --attributes --log= --vendorattribute= --firmwarebug= --presets= --drivedb= --test= --captive --abort' \ -- "$cur" ) ) [[ $COMPREPLY == *= ]] && compopt -o nospace else cur=${cur:=/dev/} _filedir fi } && complete -F _smartctl smartctl # ex: ts=4 sw=4 et filetype=sh