# 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*) # shellcheck disable=SC2054 COMPREPLY+=(${cur%%,*},{0..31}) COMPREPLY=($(compgen -W '"${COMPREPLY[@]}"' -- "$cur")) ;; hpt*) # shellcheck disable=SC2054 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 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 --quietmode | -!(-*)q) _smartctl_quietmode ;; --device | -!(-*)d) _smartctl_device return ;; --tolerance | -!(-*)T) _smartctl_tolerance return ;; --badsum | -!(-*)b) _smartctl_badsum return ;; --report | -!(-*)r) _smartctl_report return ;; --nocheck | -!(-*)n) _smartctl_powermode return ;; --smart | --offlineauto | --saveauto | -!(-*)[soS]) _smartctl_feature return ;; --log | -!(-*)l) _smartctl_log return ;; --vendorattribute | -!(-*)v) _smartctl_vendorattribute return ;; --firmwarebug | -!(-*)F) _smartctl_firmwarebug return ;; --presets | -!(-*)P) _smartctl_presets return ;; --drivedb | -!(-*)B) _smartctl_drivedb return ;; --test | -!(-*)t) _smartctl_test return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else cur=${cur:=/dev/} _filedir fi } && complete -F _smartctl smartctl # ex: filetype=sh