[Bash-completion-devel] [PATCH 2/2] Merge completions/service into the bash_completion script.
Igor Murzov
intergalactic.anonymous at gmail.com
Sat Oct 22 23:48:41 UTC 2011
Also make this completions work on Slackware GNU/Linux.
---
bash_completion | 48 ++++++++++++++++++++++++++++++++++++++++++------
completions/service | 40 ----------------------------------------
2 files changed, 42 insertions(+), 46 deletions(-)
delete mode 100644 completions/service
diff --git a/bash_completion b/bash_completion
index 84bbe80..7df5ca9 100644
--- a/bash_completion
+++ b/bash_completion
@@ -1036,12 +1036,26 @@ _gids()
#
_backup_glob='@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))'
+# This function sets correct SysV init.d directory
+#
+_sysvdir()
+{
+ if [ -f /etc/slackware-version ]; then
+ # Slackware uses /etc/rc.d
+ echo /etc/rc.d
+ elif [ -d /etc/rc.d/init.d ]; then
+ echo /etc/rc.d/init.d
+ else
+ echo /etc/init.d
+ fi
+}
+
# This function completes on services
#
_services()
{
local sysvdir famdir
- [ -d /etc/rc.d/init.d ] && sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d
+ sysvdir=$( _sysvdir )
famdir=/etc/xinetd.d
local restore_nullglob=$(shopt -p nullglob); shopt -s nullglob
@@ -1060,6 +1074,33 @@ _services()
COMPREPLY=( $( compgen -W '${COMPREPLY[@]#@($sysvdir|$famdir)/}' -- "$cur" ) )
}
+# This completes on a list of all available service scripts for the
+# 'service' command and/or the SysV init.d directory, followed by
+# that script's available commands
+_service()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # don't complete past 2nd token
+ [ $cword -gt 2 ] && return 0
+
+ if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
+ _services
+ else
+ local sysvdir=$( _sysvdir )
+ COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \
+ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \
+ $sysvdir/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) )
+ fi
+}
+complete -F _service service
+for svc in $( _sysvdir )/!($_backup_glob); do
+ [ -x "$svc" ] && complete -F _service $svc
+done
+unset svc
+
+
# This function completes on modules
#
_modules()
@@ -1817,11 +1858,6 @@ _completion_loader()
local compdir=./completions
[[ $BASH_SOURCE == */* ]] && compdir="${BASH_SOURCE%/*}/completions"
- # Special case for init.d scripts.
- if [[ $1 == /etc?(/rc.d)/init.d/* ]]; then
- . "$compdir/service" &>/dev/null && return 124 || return 1
- fi
-
# Try basename.
. "$compdir/${1##*/}" &>/dev/null && return 124
diff --git a/completions/service b/completions/service
deleted file mode 100644
index 51257ab..0000000
--- a/completions/service
+++ /dev/null
@@ -1,40 +0,0 @@
-# service(8) and /etc/init.d/* completion
-
-# This completes on a list of all available service scripts for the
-# 'service' command and/or the SysV init.d directory, followed by
-# that script's available commands
-
-_service()
-{
- local cur prev words cword
- _init_completion || return
-
- # don't complete past 2nd token
- [ $cword -gt 2 ] && return 0
-
- if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
- _services
- else
- local sysvdir
- [ -d /etc/rc.d/init.d ] && \
- sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d
- COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \
- -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \
- $sysvdir/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) )
- fi
-
- return 0
-} &&
-complete -F _service service
-for svc in /etc/init.d/!($_backup_glob) /etc/rc.d/init.d/!($_backup_glob); do
- [ -x "$svc" ] && complete -F _service $svc
-done
-unset svc
-
-# 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
--
1.7.4.4
More information about the Bash-completion-devel
mailing list