# This file implements bash completion for the ./yii command file. # It completes the commands available by the ./yii command. # See also: # - https://debian-administration.org/article/317/An_introduction_to_bash_completion_part_2 on how this works. # - https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html # - https://www.yiiframework.com/doc-2.0/guide-tutorial-console.html#bash-completion # # Usage: # Temporarily you can source this file in you bash by typing: source yii # For permanent availability, copy or link this file to /etc/bash_completion.d/ # _yii() { local cur opts yii command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" yii="${COMP_WORDS[0]}" # exit if ./yii does not exist test -f $yii || return 0 # lookup for command for word in ${COMP_WORDS[@]:1}; do if [[ $word != -* ]]; then command=$word break fi done [[ $cur == $command ]] && state="command" [[ $cur != $command ]] && state="option" [[ $cur = *=* ]] && state="value" [[ $prev == "help" ]] && state="help" case $state in command|help) # complete command/route if not given # fetch available commands from ./yii help/list command opts=$($yii help/list 2> /dev/null) ;; option) # fetch available options from ./yii help/list-action-options command opts=$($yii help/list-action-options $command 2> /dev/null | grep -o '^--[a-zA-Z0-9\-]*') ;; value) # TODO allow normal file completion after an option, e.g. --migrationPath=... ;; esac # generate completion suggestions COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 } # register completion for the ./yii command # you may adjust this line if your command file is named differently complete -o default -F _yii ./yii yii