mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-26 17:38:45 +01:00
New Bash completion script for ejabberdctl, experimental (EJAB-1042)
This commit is contained in:
parent
a5a065290b
commit
5bf3c784da
@ -5001,6 +5001,9 @@ This can be used by other scripts to determine automatically
|
|||||||
if a command succeeded or failed,
|
if a command succeeded or failed,
|
||||||
for example using: \term{echo \$?}
|
for example using: \term{echo \$?}
|
||||||
|
|
||||||
|
If you use Bash, you can get Bash completion by copying the file \term{tools/ejabberdctl.bc}
|
||||||
|
to the directory \term{/etc/bash\_completion.d/} (in Debian, Ubuntu, Fedora and maybe others).
|
||||||
|
|
||||||
\makesubsection{ectl-commands}{ejabberdctl Commands}
|
\makesubsection{ectl-commands}{ejabberdctl Commands}
|
||||||
|
|
||||||
When \term{ejabberdctl} is executed without any parameter,
|
When \term{ejabberdctl} is executed without any parameter,
|
||||||
|
99
tools/ejabberdctl.bc
Normal file
99
tools/ejabberdctl.bc
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#
|
||||||
|
# bash completion for ejabberdctl
|
||||||
|
#
|
||||||
|
get_help()
|
||||||
|
{
|
||||||
|
local COMMANDCACHE=/var/log/ejabberd/bash_completion_$RANDOM
|
||||||
|
ejabberdctl $CTLARGS help >$COMMANDCACHE
|
||||||
|
if [[ $? == 2 ]] ; then
|
||||||
|
ISRUNNING=1
|
||||||
|
runningcommands=`cat $COMMANDCACHE | grep "^ [a-z]" | awk '{print $1}' | xargs`
|
||||||
|
fi
|
||||||
|
rm $COMMANDCACHE
|
||||||
|
}
|
||||||
|
|
||||||
|
_ejabberdctl()
|
||||||
|
{
|
||||||
|
local cur prev
|
||||||
|
local ISRUNNING=0
|
||||||
|
local runningcommands
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
|
||||||
|
local startcoms="start debug live"
|
||||||
|
local startpars="--config-dir --config --ctl-config --logs --spool"
|
||||||
|
|
||||||
|
local i=1
|
||||||
|
local CTLARGS=""
|
||||||
|
while [ $i -lt $COMP_CWORD ] ; do
|
||||||
|
local PARAM="${COMP_WORDS[i]}"
|
||||||
|
i=$((i+1))
|
||||||
|
case $PARAM in
|
||||||
|
--*)
|
||||||
|
CTLARGS="--node ${COMP_WORDS[i]}"
|
||||||
|
i=$((i+1)) ;;
|
||||||
|
*) break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case "${prev##*/}" in
|
||||||
|
ejabberdctl)
|
||||||
|
# This clause matches even when calling `/sbin/ejabberdctl` thanks to the ##*/ in the case
|
||||||
|
get_help
|
||||||
|
COMPREPLY=($(compgen -W "--node --auth ${startpars} ${startcoms} ${runningcommands}" -- $cur))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
start|live)
|
||||||
|
COMPREPLY=($(compgen -W "--node ${startpars}" -- $cur))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
debug)
|
||||||
|
COMPREPLY=($(compgen -W "--node" -- $cur))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
get_help
|
||||||
|
COMPREPLY=($(compgen -W "${runningcommands}" -- $cur))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--node)
|
||||||
|
RUNNINGNODES=`epmd -names | grep name | awk '{print $2"@localhost"}' | xargs`
|
||||||
|
COMPREPLY=($(compgen -W "$RUNNINGNODES" -- $cur))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--config|--ctl-config)
|
||||||
|
_filedir '?(u)cfg'
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--config-dir|--logs|--spool)
|
||||||
|
_filedir
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
prev2="${COMP_WORDS[COMP_CWORD-2]}"
|
||||||
|
get_help
|
||||||
|
if [[ "$prev2" == --* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--node --auth ${startpars} ${startcoms} ${runningcommands}" -- $cur))
|
||||||
|
else
|
||||||
|
if [[ $ISRUNNING == 1 ]]; then
|
||||||
|
echo ""
|
||||||
|
ejabberdctl $CTLARGS help ${PARAM}
|
||||||
|
echo -n "${COMP_LINE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _ejabberdctl ejabberdctl
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-basic-offset: 4
|
||||||
|
# sh-indent-comment: t
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# End:
|
||||||
|
# ex: ts=4 sw=4 et filetype=sh
|
Loading…
Reference in New Issue
Block a user