Nếu bạn sử dụng linux hoặc DOS, chắc hẳn bạn đã biết tính năng bash completion là 1 tính năng tiện lợi đối với việc gõ lệnh, nó giúp bạn gõ nhanh mà không phải nhớ quá nhiều thứ. Ví dụ tôi muốn gõ lệnh symfony, thay vì phải gõ đầy đủ thì tôi chỉ cần gõ sym<tab> thì linux sẽ tự động thay bằng symfony. Nếu trong trường hợp có nhiều kết quả, nó sẽ hiện ra những trường hợp có thể có. Ví dụ tôi gõ sy<tab><tab>, kết quả hiện ra sẽ là
symfony syslogd
synaptic syslogd-listfiles
sync syslog-facility
synclient system-config-printer
syndaemon system-config-printer-applet
sysctl system-tools-backends
Để linux có thể gợi ý tiếp những option khác cho symfony, ví dụ như symfony init-app frontend, bạn cần tạo 1 file /etc/bash_completion.d/symfony như sau:
_symfony()
{
local cur prev action
COMREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
action=${COMP_WORDS[1]}
case "$prev" in
init-module|propel-generate-crud|propel-init-crud|propel-init-admin|propel-load-data|propel-build-all-load)
COMPREPLY=( $( compgen -W "$( ls –color=n -1 apps 2>/dev/null| sed -e ’s/ /\\ /g’ )" — $cur ))
return 0
;;
init-project)
COMPREPLY=( $( compgen -W "$( basename $PWD )" — $cur ))
return 0
;;
init-app)
COMPREPLY=( $( compgen -W "frontend backend" — $cur))
return 0
;;
symfony)
COMPREPLY=( $( compgen -W "$( symfony -T | awk ‘/^ /’ | cut -d’ ‘ -f3 )" — $cur ) )
return 0
;;
plugin-install)
COMPREPLY=( $( compgen -W ‘local global’ — $cur ) )
return 0
;;
global|local)
COMPREPLY=( $( compgen -W ’symfony/’ ) )
return 0
;;
*)
case "$action" in
propel-generate-crud|propel-init-crud|propel-init-admin)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W "$( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename {} .php \; |grep -v Peer\$| tr [:upper:] [:lower:] )" — $cur ) )
elif (($COMP_CWORD == 4)); then
COMPREPLY=( $( compgen -W "$( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename {} .php \; |grep -v Peer\$ )" — $cur ) )
fi
return 0
;;
esac
return 0
;;
sync)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W ‘go’ — $cur))
fi
return 0
;;
esac
return 0
}
complete -F _symfony symfony
sau đó đóng terminal rồi bật lên lại là mọi thứ đã hoạt động.
Test thử xem nào:
sym<tab>
symfony
symfony <tab>
app init-batch
batch init-controller
cc init-module
clear-cache init-project
clear-controllers log-purge
controller log-rotate
disable module
doctrine-build-all new
doctrine-build-all-load plugin-install
doctrine-build-all-reload plugin-list
doctrine-build-db plugin-uninstall
doctrine-build-model plugin-upgrade
doctrine-build-schema propel-build-all
doctrine-build-sql propel-build-all-load
doctrine-convert-schema propel-build-db
doctrine-dql propel-build-model
doctrine-drop-db propel-build-schema
doctrine-dump-data propel-build-sql
doctrine-generate-crud propel-convert-xml-schema
doctrine-generate-migration propel-convert-yml-schema
doctrine-generate-migrations-db propel-dump-data
doctrine-generate-migrations-models propel-generate-crud
doctrine-init-admin propel-init-admin
–More–
symfony doc<tab>
symfony doctrine-
symfony doctrine-ini<tab>
symfony doctrine-init-admin
haha, have fun!
Thảm khảo:
Author: An Vũ