[JdeRobot] Bash completion for zeroc ice applications

Oscar Garcia oscar.robotica at linaresdigital.com
Tue Apr 19 21:49:21 CEST 2016


Hi all,

I've always had the hassle of not having bash completion with the 
jderobot components/drivers/programs, so, especially when typing the 
argument --Ice.Config=<configuration file>, I had to do different tricks 
to fill the gap.

I have developed a bash completion script that I hope help you end this 
hassle.

It works with any executable file (not only binaries, scripts too) and 
helps you choosing and remember zeroc ICE command line parameters and, 
after typing "=", select an *.cfg file (warning, this happens with all 
options, as TCP and UDP parameters too!).

This is the script (/etc/bash_completion.d/zeroc-ice.sh):

#! /bin/bash

_zeroc_ice() {
   # ¿Es un ejecutable?
   [ ! -x "$1" ] && return 0
   local actual previo opciones;
   COMREPLY=()
   actual="${COMP_WORDS[COMP_CWORD]}"
   previo="${COMP_WORDS[COMP_CWORD-1]}"
   opciones="
--Ice.ACM.
--Ice.Admin.
--Ice.Config=
--Ice.Default.CollocationOptimized=
--Ice.Default.EncodingVersion=
--Ice.Default.EndpointSelection=
--Ice.Default.Host=
--Ice.Default.InvocationTimeout=
--Ice.Default.Locator=
--Ice.Default.LocatorCacheTimeout=
--Ice.Default.Package=
--Ice.Default.PreferSecure=
--Ice.Default.Protocol=
--Ice.Default.Router=
--Ice.Default.SlicedFormat=
--Ice.Default.SourceAddress=
--Ice.Default.Timeout=
--Ice.InitPlugins=
--Ice.IPv4=
--Ice.IPv6=
--Ice.Override.
--Ice.Plugin.
--Ice.PluginLoadOrder=
--Ice.PreferIPv6Address=
--Ice.TCP.Backlog=
--Ice.TCP.RcvSize=
--Ice.TCP.SndSize=
--Ice.ThreadPool.
--Ice.ThreadPriority=
--Ice.Trace.
--Ice.UDP.RcvSize=
--Ice.UDP.SndSize=
--Ice.Warn.
--IceBox.
--IceBoxAdmin=
--IceDiscovery.
--IceGrid.
--IceGridAdmin.
--IceLocatorDiscovery.
--IceMX.Metrics.
--IcePatch2.
--IcePatch2Client.
--IceSSL.
"
   # Si hemos tecleado un argumento "--*" y acabamos de teclear el "=", 
listamos los archivos *.cfg
   if [[ ${previo} == "--"* && ${actual} == "=" ]]
   then
     compopt -o filenames
     local archivos=( *.cfg )
     # Comprobamos que exista al menos el primer archivo para evitar que 
nos devuelvan el patrón (no encontrado)
     [[ -r ${archivos[0]} ]] && COMPREPLY=( "${archivos[@]// /\ }" )
     return 0
   fi
   # Si hemos tecleado el argumento y estamos tras el "=", completamos 
el resto del nombre del archivo
   if [[ ${previo} == '=' ]]
   then
     compopt -o filenames
     local archivos=( ${actual}*.cfg )
     # Comprobamos que exista al menos el primer archivo para evitar que 
nos devuelvan el patrón (no encontrado)
     [[ -r ${archivos[0]} ]] && COMPREPLY=( "${archivos[@]// /\ }" )
     return 0
   fi

   # Si hemos llegado hasta aquí aún no hemos llegado al "=", 
completamos sólo las opciones
   COMPREPLY=( $(compgen -W "${opciones}" -- "${actual}" ) );
}
complete -o nospace -D -F _zeroc_ice

------------ próxima parte ------------
Se ha borrado un mensaje que no est� en formato texto plano...
Nombre     : zeroc-ice.sh
Tipo       : application/x-shellscript
Tama�o     : 2079 bytes
Descripci�n: no disponible
Url        : http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20160419/37b56483/attachment.bin 


More information about the Jde-developers mailing list