Editing
Util-vserver:Bash Completion
From Linix VServer
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
To test this, put the source in your .bashrc or put it in the file /etc/bash_completion.d/vserver (Debian). This release (0.4) supports the commands vserver vapt-get vrpm vyum vserver-copy. This script is included in the util-vserver Debian package, and is automatically installed into /etc/bash_completion.d/vserver when you install this package. For zsh completion, the Debian zsh package has the vserver completion included, see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=365238 for the source, or https://intrigeri.boum.org/svn/pub/home/modules/base/.zsh/functions/_vserver for the upstream SVN repository. <pre><nowiki> # Completion for the vserver command. Source this file (or on some systems # add it to ~/.bash_completion and start a new shell) and bash's completion # mechanism will know all about vserver's options! # # Copyright (C) Thomas Champagne <lafeuil@gmail.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # The latest version of this software can be obtained here: # # http://linux-vserver.org/util-vserver:Bash_Completion # # version 0.4.1 have vserver-info && { : ${UTIL_VSERVER_VARS:=$(vserver-info - SYSINFO |grep prefix: | awk '{ print $2}')/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" && { if [ -z "$_VS_NEWLINE" -o -z "$VS_ALLVSERVERS_ARGS" ] then . "$UTIL_VSERVER_VARS" . "$_LIB_FUNCTIONS" fi _vserver() { local cur cmds cmdOpts cmdMethodOpts helpCmds names names_pipe func i j method COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} # find available v-servers: # call function getAllVservers in vserver library getAllVservers names names_pipe=`echo ${names[@]} | sed 's/ /|/g'` # available commands cmds='start stop restart condrestart suexec exec enter chkconfig \ running status unify pkg apt-get apt-config apt-cache \ rpm pkgmgmt delete' # options (long and short name) cmdOpts='--help --version --debug --defaulttty -s --sync -v \ --verbose --silent --' cmdMethodOpts='-m -n --context --confdir --lockfile \ --hostname --netdev --netbcast --netmask \ --netprefix --interface --cpuset \ --cpusetcpus --cpusetmems --cpusetvirt \ --initstyle --flags --help --' # if the previous option is a single option helpCmds='--help|--version' if [[ ${COMP_WORDS[1]} == @($helpCmds) ]] then return 0 fi # search a verser's name for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) do if [[ ${COMP_WORDS[i]} == @($names_pipe) ]] then # it's found break fi done #a vserver has been found if (( $i < ${#COMP_WORDS[@]}-1 )) then #Show the vserver command without build case "${COMP_WORDS[i+1]}" in start) COMPREPLY=( $( compgen -W "--rescue --rescue-cmd" -- $cur ) ) ;; # No completion for apt-config stop|restart|condrestart|enter|running|status|apt-config|delete) ;; suexec) # I don't know how to do COMPREPLY=( $( compgen -W -- $cur ) ) ;; exec) #I don't know how to do COMPREPLY=( $( compgen -W "" -- $cur ) ) ;; unify) COMPREPLY=( $( compgen -W "-R" -- $cur ) ) ;; apt-get|apt-cache) func=${COMP_WORDS[i+1]} COMP_WORDS=( ${COMP_WORDS[@]:$((i+1))} ) COMP_CWORD=$((COMP_CWORD-i-1)) declare -f _${func//-/_} > /dev/null && _${func//-/_} ;; *) COMPREPLY=( $( compgen -W "$cmds" -- $cur ) ) ;; esac return 0 else #no vserver name found prev=${COMP_WORDS[COMP_CWORD-1]} #search the new name of vserver for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} == !(vserver|-*) ]]; then # it's found break fi done if (( $i < ${#COMP_WORDS[@]}-1 )) ; then j=$i i=${#COMP_WORDS[@]} for (( ; j < ${#COMP_WORDS[@]}-1; j++ )); do if [[ ${COMP_WORDS[j]} == "--" ]]; then # method's parameter case "$method" in legacy|copy) ;; apt-rpm) COMPREPLY=( $( compgen -W "-d" -- $cur ) ) ;; yum) COMPREPLY=( $( compgen -W "-d" -- $cur ) ) ;; rpm) COMPREPLY=( $( compgen -W "-d --empty --force --nodeps" -- $cur ) ) ;; skeleton) ;; debootstrap) COMPREPLY=( $( compgen -W "-d -m -s --" -- $cur ) ) ;; *) #do nothing #the method is not defined ;; esac return 0 break fi if [[ ${COMP_WORDS[j]} == @(build|-m) ]]; then i=$j if (( $j+1 < ${#COMP_WORDS[@]}-1 )) ; then method=${COMP_WORDS[j+1]} fi fi done if (( $i < ${#COMP_WORDS[@]}-1 )) ; then case $prev in --help) #do nothing ;; -n|--context|--confdir|--lockfile|--hostname|--netdev|--netbcast|--netmask|--netprefix|--interface|--cpuset|--cpusetcpus|--cpusetmems|--cpusetvirt|--initstyle|--flags) COMPREPLY=( $( compgen -W "" -- $cur ) ) ;; -m) COMPREPLY=( $( compgen -W "legacy copy apt-rpm yum rpm skeleton debootstrap" -- $cur ) ) ;; *) COMPREPLY=( $( compgen -W "$cmdMethodOpts" -- $cur ) ) ;; esac else COMPREPLY=( $( compgen -W "build" -- $cur ) ) fi else COMPREPLY=( $( compgen -W "${names[*]} $cmdOpts" -- $cur ) ) fi return 0 fi return 0 } complete -F _vserver vserver _vapt_rpm_yum() { local cur cmds cmdOpts helpCmds names func i COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} # options (long and short name) cmdOpts='--help --version --quiet -q --all' # if the previous option is a single option helpCmds='--help|--version' if [[ "${COMP_WORDS[1]}" == "@($helpCmds)" ]] ; then return 0 fi # search -- for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} = "--" ]]; then # it's found break fi done # find available v-servers: # call function getAllVservers in vserver library getAllVservers names names_pipe=`echo ${names[@]}" --all" | sed 's/ /|/g'` if (( $i < ${#COMP_WORDS[@]}-1 )) && (( $i < $COMP_CWORD )) ; then func=${COMP_WORDS[0]:1} COMP_WORDS=( $func ${COMP_WORDS[@]:$((i+1))} ) COMP_CWORD=$((COMP_CWORD-i)) declare -f _${func//-/_} > /dev/null && _${func//-/_} else # search a verser's name for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} == @($names_pipe) ]]; then # it's found break fi done if (( $i < ${#COMP_WORDS[@]}-1 )) ; then if [[ "${COMP_WORDS[i]}" = "--all" ]]; then cmdOpts='--' COMPREPLY=( $( compgen -W "$cmdOpts" -- $cur ) ) else cmdOpts='--' COMPREPLY=( $( compgen -W "${names[@]} $cmdOpts" -- $cur ) ) fi else COMPREPLY=( $( compgen -W "${names[*]} $cmdOpts" -- $cur ) ) fi fi return 0 } complete -F _vapt_rpm_yum vapt-get complete -F _vapt_rpm_yum vrpm complete -F _vapt_rpm_yum vyum _vserver_copy() { local cur prev cmdOpts helpCmds confCmds names names_pipe i COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} # find available v-servers: # call function getAllVservers in vserver library getAllVservers names names_pipe=`echo ${names[@]} | sed 's/ /|/g'` # options (long and short name) cmdOpts='--help -h --version -V --verbose -v --quiet -q \ --vsroot -r --rsh -R --stopstart -s \ --domain -d --ip -i' # if the previous option is a single option helpCmds='--help|-h|--version|-V' if [[ ${COMP_WORDS[1]} == @($helpCmds) ]] ; then return 0 fi confCmds='--ip|-i|--domain|-d' prev=${COMP_WORDS[COMP_CWORD-1]} if [[ $prev == @($confCmds) ]]; then return 0 fi # search a verser's name for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} == @($names_pipe) ]]; then # it's found break fi done if (( $i < ${#COMP_WORDS[@]}-1 )) ; then return 0 else COMPREPLY=( $( compgen -W "${names[*]} $cmdOpts" -- $cur ) ) fi return 0 } complete -F _vserver_copy vserver-copy } } </nowiki></pre> ;Changelog : :0.4.1 : handle multiple sourcing scenarios :0.4.0 : Update command vserver build :0.3.2 : Add Licence :0.3.1 : Add the command vapt-get vrpm vyum vserver-copy :0.2.0 : First release with just the command vserver [[Category:Configuration]]
Summary:
Please note that all contributions to Linix VServer may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Linix VServer:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Page actions
Page
Discussion
Read
Edit
History
Page actions
Page
Discussion
More
Tools
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
About
Overview
Paper
News
Developers
Donations
Search
Getting Started
Downloads
FAQs
Documentation
Support
Participate
How to participate
Report a Bug
Communicate
Teams/Projects
Hall of Fame
Resources
Archives
Recent Wiki Changes
Pastebin
Related Projects
VServer Hosting
Happy VServer Users
Tools
What links here
Related changes
Special pages
Page information