# crontab(1) completion -*- shell-script -*- proc _crontab { local cur prev words cword _init_completion || return case (prev) { -u { _allowed_users return 0 } } local -A opts=( [-u]= [-l]= [-r]= [-e]= ) [[ $OSTYPE == *linux* ]] && setvar opts[-i]= [[ -d /sys/fs/selinux || -d /selinux ]] && setvar opts[-s]= local i for (( i=0; i < ${#words[@]}-1; i++ )); do [[ ${words[i]} ]] && unset "opts[${words[i]}]" case "${words[i]}" in -l) unset 'opts[-r]' 'opts[-e]' 'opts[-i]' 'opts[-s]' ;; -e) unset 'opts[-l]' 'opts[-r]' 'opts[-i]' ;; -r) unset 'opts[-l]' 'opts[-e]' ;; -u) unset 'opts[-i]' ;; esac done if [[ "$cur" == -* ]] { setvar COMPREPLY = ''( $( compgen -W '${!opts[@]}' -- "$cur" ) ) return 0 } # do filenames only if we did not have -l, -r, or -e [[ "${words[@]}" == *\ -[lre]* ]] || _filedir } && complete -F _crontab crontab # ex: ts=4 sw=4 et filetype=sh