1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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
|