1_my-app() { 2 local i cur prev opts cmd 3 COMPREPLY=() 4 cur="${COMP_WORDS[COMP_CWORD]}" 5 prev="${COMP_WORDS[COMP_CWORD-1]}" 6 cmd="" 7 opts="" 8 9 for i in ${COMP_WORDS[@]} 10 do 11 case "${cmd},${i}" in 12 ",$1") 13 cmd="my__app" 14 ;; 15 my__app,help) 16 cmd="my__app__help" 17 ;; 18 my__app,some_cmd) 19 cmd="my__app__some_cmd" 20 ;; 21 my__app,some_cmd_alias) 22 cmd="my__app__some_cmd" 23 ;; 24 my__app,test) 25 cmd="my__app__test" 26 ;; 27 my__app__help,help) 28 cmd="my__app__help__help" 29 ;; 30 my__app__help,some_cmd) 31 cmd="my__app__help__some_cmd" 32 ;; 33 my__app__help,test) 34 cmd="my__app__help__test" 35 ;; 36 my__app__help__some_cmd,sub_cmd) 37 cmd="my__app__help__some_cmd__sub_cmd" 38 ;; 39 my__app__some_cmd,help) 40 cmd="my__app__some_cmd__help" 41 ;; 42 my__app__some_cmd,sub_cmd) 43 cmd="my__app__some_cmd__sub_cmd" 44 ;; 45 my__app__some_cmd__help,help) 46 cmd="my__app__some_cmd__help__help" 47 ;; 48 my__app__some_cmd__help,sub_cmd) 49 cmd="my__app__some_cmd__help__sub_cmd" 50 ;; 51 *) 52 ;; 53 esac 54 done 55 56 case "${cmd}" in 57 my__app) 58 opts="-C -c -h -V --conf --config --help --version [file] first second test some_cmd help" 59 if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then 60 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 61 return 0 62 fi 63 case "${prev}" in 64 *) 65 COMPREPLY=() 66 ;; 67 esac 68 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 69 return 0 70 ;; 71 my__app__help) 72 opts="test some_cmd help" 73 if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then 74 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 75 return 0 76 fi 77 case "${prev}" in 78 *) 79 COMPREPLY=() 80 ;; 81 esac 82 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 83 return 0 84 ;; 85 my__app__help__help) 86 opts="" 87 if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then 88 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 89 return 0 90 fi 91 case "${prev}" in 92 *) 93 COMPREPLY=() 94 ;; 95 esac 96 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 97 return 0 98 ;; 99 my__app__help__some_cmd) 100 opts="sub_cmd" 101 if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then 102 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 103 return 0 104 fi 105 case "${prev}" in 106 *) 107 COMPREPLY=() 108 ;; 109 esac 110 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 111 return 0 112 ;; 113 my__app__help__some_cmd__sub_cmd) 114 opts="" 115 if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then 116 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 117 return 0 118 fi 119 case "${prev}" in 120 *) 121 COMPREPLY=() 122 ;; 123 esac 124 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 125 return 0 126 ;; 127 my__app__help__test) 128 opts="" 129 if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then 130 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 131 return 0 132 fi 133 case "${prev}" in 134 *) 135 COMPREPLY=() 136 ;; 137 esac 138 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 139 return 0 140 ;; 141 my__app__some_cmd) 142 opts="-h -V --help --version sub_cmd help" 143 if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then 144 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 145 return 0 146 fi 147 case "${prev}" in 148 *) 149 COMPREPLY=() 150 ;; 151 esac 152 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 153 return 0 154 ;; 155 my__app__some_cmd__help) 156 opts="sub_cmd help" 157 if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then 158 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 159 return 0 160 fi 161 case "${prev}" in 162 *) 163 COMPREPLY=() 164 ;; 165 esac 166 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 167 return 0 168 ;; 169 my__app__some_cmd__help__help) 170 opts="" 171 if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then 172 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 173 return 0 174 fi 175 case "${prev}" in 176 *) 177 COMPREPLY=() 178 ;; 179 esac 180 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 181 return 0 182 ;; 183 my__app__some_cmd__help__sub_cmd) 184 opts="" 185 if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then 186 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 187 return 0 188 fi 189 case "${prev}" in 190 *) 191 COMPREPLY=() 192 ;; 193 esac 194 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 195 return 0 196 ;; 197 my__app__some_cmd__sub_cmd) 198 opts="-h -V --config --help --version" 199 if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then 200 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 201 return 0 202 fi 203 case "${prev}" in 204 --config) 205 COMPREPLY=($(compgen -W "Lest quotes, aren't escaped. Second to trigger display of options" -- "${cur}")) 206 return 0 207 ;; 208 *) 209 COMPREPLY=() 210 ;; 211 esac 212 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 213 return 0 214 ;; 215 my__app__test) 216 opts="-h -V --case --help --version" 217 if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then 218 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 219 return 0 220 fi 221 case "${prev}" in 222 --case) 223 COMPREPLY=($(compgen -f "${cur}")) 224 return 0 225 ;; 226 *) 227 COMPREPLY=() 228 ;; 229 esac 230 COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) 231 return 0 232 ;; 233 esac 234} 235 236complete -F _my-app -o bashdefault -o default my-app 237