diff options
Diffstat (limited to '')
-rw-r--r-- | completions/smartctl | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/completions/smartctl b/completions/smartctl new file mode 100644 index 0000000..ee45a7c --- /dev/null +++ b/completions/smartctl @@ -0,0 +1,165 @@ +# 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 |