使用控制台为开发人员提供了许多可能性,但必须完全了解并编写这些命令可能很繁琐。 特别是在开发新 shell 时,命令会因分钟迭代而异。 完成 Shell 通过提供 API 来编写 bash、zsh、fish 等 shell 的完成脚本,从而帮助解决这个问题。
完成 Shell 包含许多子命令,以帮助开发人员创建其完成脚本。 每个命令对应于自动完成过程中的不同步骤。
对于第一步,commands 输出可用的 Shell 命令,包括适用的插件名称。(此命令和其他子命令返回的所有可能性都用空格隔开。)例如
bin/cake Completion commands
返回值
acl api bake command_list completion console i18n schema server test testsuite upgrade
您的完成脚本可以从该列表中选择相关的命令以继续执行。(对于此命令和以下子命令。)
一旦选择了首选命令,subCommands 就会作为第二步出现,并输出给定 shell 命令的可能子命令。 例如
bin/cake Completion subcommands bake
返回值
controller db_config fixture model plugin project test view
作为第三步也是最后一步,options 输出在 getOptionParser 中设置的给定(子)命令的选项。(包括从 Shell 继承的默认选项。)例如
bin/cake Completion options bake
返回值
--help -h --verbose -v --quiet -q --everything --connection -c --force -f --plugin -p --prefix --theme -t
您还可以传递额外的参数作为 shell 子命令:它将输出此子命令的特定选项。
首先,确保已安装 bash-completion 库。 如果没有,您可以使用以下命令进行安装
apt-get install bash-completion
在 /etc/bash_completion.d/ 中创建一个名为 cake 的文件,并将 Bash 完成文件内容 放入其中。
保存文件,然后重新启动您的控制台。
注意
如果您使用的是 MacOS X,可以使用 homebrew 通过命令 brew install bash-completion
安装 bash-completion 库。 cake 文件的目标目录将是 /usr/local/etc/bash_completion.d/。
这是您需要放在正确位置的 cake 文件中的代码,以便在使用 CakePHP 控制台时获得自动完成
#
# Bash completion file for CakePHP console
#
_cake()
{
local cur prev opts cake
COMPREPLY=()
cake="${COMP_WORDS[0]}"
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$cur" == -* ]] ; then
if [[ ${COMP_CWORD} = 1 ]] ; then
opts=$(${cake} Completion options)
elif [[ ${COMP_CWORD} = 2 ]] ; then
opts=$(${cake} Completion options "${COMP_WORDS[1]}")
else
opts=$(${cake} Completion options "${COMP_WORDS[1]}" "${COMP_WORDS[2]}")
fi
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
if [[ ${COMP_CWORD} = 1 ]] ; then
opts=$(${cake} Completion commands)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
if [[ ${COMP_CWORD} = 2 ]] ; then
opts=$(${cake} Completion subcommands $prev)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
if [[ $COMPREPLY = "" ]] ; then
_filedir
return 0
fi
return 0
fi
opts=$(${cake} Completion fuzzy "${COMP_WORDS[@]:1}")
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
if [[ $COMPREPLY = "" ]] ; then
_filedir
return 0
fi
return 0;
}
complete -F _cake cake bin/cake
启用后,自动完成可以使用与其他内置命令相同的方式,使用 TAB 键。 提供了三种类型的自动完成。 以下输出来自一个新的 CakePHP 安装。
命令自动完成的示例输出
$ bin/cake <tab>
bake i18n schema_cache routes
console migrations plugin server
子命令自动完成的示例输出
$ bin/cake bake <tab>
behavior helper command
cell mailer command_helper
component migration template
controller migration_snapshot test
fixture model
form plugin
子命令选项自动完成的示例输出
$ bin/cake bake -<tab>
-c --everything --force --help --plugin -q -t -v
--connection -f -h -p --prefix --quiet --theme --verbose