132 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # Copyright (c) 2014, Intel Corporation
 | |
| # All rights reserved.
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without modification,
 | |
| # are permitted provided that the following conditions are met:
 | |
| #
 | |
| # 1. Redistributions of source code must retain the above copyright notice, this
 | |
| # list of conditions and the following disclaimer.
 | |
| #
 | |
| # 2. Redistributions in binary form must reproduce the above copyright notice,
 | |
| # this list of conditions and the following disclaimer in the documentation and/or
 | |
| # other materials provided with the distribution.
 | |
| #
 | |
| # 3. Neither the name of the copyright holder nor the names of its contributors
 | |
| # may be used to endorse or promote products derived from this software without
 | |
| # specific prior written permission.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | |
| # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | |
| # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | |
| # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| # bash completion for remote-process
 | |
| #
 | |
| # Execute this file in bash with the built-in command "source",
 | |
| # it will add autocompletion to remote-process.
 | |
| #
 | |
| # To permanently add this autocompletion, add "source this_file"
 | |
| # in your .bashrc or copy this file in /etc/bash_completion.d/
 | |
| 
 | |
| function _remote-process ()
 | |
| {
 | |
|     # Get current word
 | |
|     local cur prev words cword;
 | |
|     _init_completion || return;
 | |
| 
 | |
|     local options=""
 | |
|     if [ $cword -eq 1 ]
 | |
|     then # Completing the hostname
 | |
|         _known_hosts_real "$cur"; return
 | |
|     elif [ $cword -eq 2 ] # Completing tcp port
 | |
|     then
 | |
|         options='5000 5001 5008 5009 5019';
 | |
|     else
 | |
|         _remoteProcessWrapper () {
 | |
|             "${words[0]}" "${words[1]}" "${words[2]}" "$@" |sed 's#\r##;/^$/d'
 | |
|         }
 | |
| 
 | |
|         # Get usage
 | |
|         local _parameterHelp=$(_remoteProcessWrapper help)
 | |
| 
 | |
|         if [ $cword -eq 3 ]
 | |
|         then # Completing command
 | |
|             options=$(echo "$_parameterHelp" | awk '{print $1}')
 | |
|         else # Completing command argument
 | |
|             local command=${words[3]}
 | |
| 
 | |
|             # Get current command argument types
 | |
|             # - keep in the help text only the line describing current command
 | |
|             # - delete => and posterior
 | |
|             # - replace space in balisa (<...>) by underscore then delete [<>]
 | |
|             local argumentTypes=$( echo "$_parameterHelp" | grep "$command"  |\
 | |
|                  sed -e 's# *=>.*##' -e 's#^[^ ]* *##' \
 | |
|                      -e 's/> />#/g' -e 's# #_#g' -e 's/>#/> /g' -e 's#[<>]##g' )
 | |
| 
 | |
|             local currentArgumentType=$(echo $argumentTypes |
 | |
|                                           awk '{print $('$cword'-3)}')
 | |
| 
 | |
|             # Take care of argument list type if it is the last argument
 | |
|             # Ex : setElementSequence <domain> <configuration> <elem path list>
 | |
|             if [ "$currentArgumentType" = "" ] &&
 | |
|                  expr "$argumentTypes" : '.*list' > /dev/null ;
 | |
|             then
 | |
|                 # Set last argument type specified as the current type
 | |
|                 currentArgumentType=$(echo "$argumentTypes" | awk '{print $NF}')
 | |
|             fi
 | |
| 
 | |
| 
 | |
|             case "${currentArgumentType}" in
 | |
|                 elem_path*|param_path* )
 | |
|                     local incompletPath=$(echo "${cur}" | sed 's#[^/]*$##')
 | |
| 
 | |
|                     local parameterCommand
 | |
|                     if [ "$currentArgumentType" = elem_path_list ];
 | |
|                     then
 | |
|                         # <elem path list> is the parameter path list
 | |
|                         #  of the domain specified by the second argument
 | |
|                         parameterCommand="listDomainElements ${words[4]}"
 | |
|                     else
 | |
|                         # Otherwise suggest all parameter paths
 | |
|                         parameterCommand="listParameters"
 | |
|                     fi
 | |
|                     # Get paths and delete everything after the first "/"
 | |
|                     # following the current input (see complete -o filenames)
 | |
|                     local options=$(_remoteProcessWrapper $parameterCommand ${incompletPath:-/} |
 | |
|                                     sed -re "s#(/?${incompletPath}[^/ ]*/?).*#\1#")
 | |
|                     compopt -o filenames
 | |
| 
 | |
|                     # If some options are folders, do not append a space
 | |
|                     test "$(echo "$options" | sed '/[^/]$/d')" && compopt -o nospace
 | |
|                 ;;
 | |
|                 domain)
 | |
|                     # Get all domain names
 | |
|                     options=$(_remoteProcessWrapper listDomains | awk '{print $1}')
 | |
|                 ;;
 | |
|                 configuration)
 | |
|                     # Get all configurations of the domain specified by
 | |
|                     # the second argument.
 | |
|                     # TODO: find the domain position using $argumentTypes
 | |
|                     options=$(_remoteProcessWrapper listConfigurations "${words[4]}")
 | |
|                 ;;
 | |
|                 *\|*)
 | |
|                     # Possible arguments are separated by "|". Ex : on|off
 | |
|                     options=$(echo $currentArgumentType | sed -e 's#|# #g' -e 's#\*##g')
 | |
|                 ;;
 | |
|                 file_path)
 | |
|                     _filedir;
 | |
|                 ;;
 | |
|             esac
 | |
|         fi
 | |
|     fi
 | |
|     COMPREPLY+=( $(compgen -W "$options" -- "$cur") )
 | |
| 
 | |
|     unset _remoteProcessWrapper
 | |
| } && complete  -F _remote-process remote-process
 |