Andaba optimizando mi bashrc que estaba muy cargado y arreglé una utilidad que no había terminado de hacer funcionar. La comparto con uds, es muy útil para los que usamos alias. Es preciso aclarar que para su funcionamiento correcto deben tenerla posterior al bloque if [ -f /etc/bash_completion ] && ! shopt -oq posix; then . /etc/bash_completion fi Esto es solo en caso contrario al que no tengan descomentariado dicho bloque en /etc/bash.bashrc
# completion_alias_wrapper recibe tres argumentos: # $1: El alias # $2: El comando usado en el alias # $3: Los argumentos del comando en el alias # Fuente: http://stackoverflow.com/questions/342969/how-do-i-get-bash-completion-to-work-with-aliases function completion_alias_wrapper() { [[ "$#" == 3 ]] || return 1 local alias_name="$1" local aliased_command="$2" local alias_arguments="$3" local num_alias_arguments=$(echo "$alias_arguments" | wc -w) # Obteniendo descripción del completador para el comando. local completion=$(complete -p $aliased_command 2> /dev/null) # Solo se puede hacer una envoltura de un completador basado en función, # así que se busca -F en la variable 'completion'. echo $completion | grep -q -- -F || return 0 local namespace=alias_completion:: # Se separa el nombre de la función de completado. local completion_function=${completion##* -F } completion_function=${completion_function%% *} # Se evita un ciclo infinito para no envolver una función de completamiento # generada por esta función. Esto puede suceder cuando se corre este código # dos veces para un alias como ls='ls --color=auto' o alias l='ls' y # alias ls='l foo' [[ "${completion_function#$namespace}" != $completion_function ]] && return 0 local wrapper_name="${namespace}${alias_name}" eval "function ${wrapper_name}() { let COMP_CWORD+=$num_alias_arguments args=( \"${alias_arguments}\" ) COMP_WORDS=( $aliased_command \${args[@]} \ ${COMP_WORDS[@]:1} ) $completion_function }" # Para crear el nuevo completado se usa el viejo con dos reemplazos: # 1) Sustitución de la función con la envoltura. local new_completion=${completion/-F * /-F $wrapper_name } # 2) Sustitución del comando por el alias. new_completion="${new_completion% *} $alias_name" eval "$new_completion" } # Para cada alias definido (personalmente no me es práctico esto, así que no la uso) #eval "$(alias -p | sed -e 's/alias \([^=][^=]*\)='\''\([^ ][^ ]*\) * \(.*\)'\''/completion_alias_wrapper \1 \2 '\''\3'\'' /')" -- Marcel Sánchez Góngora Debian testing/sid Linux User #382151 El pobre puede morir, lo que no puede es estar enfermo. ** Proverbio finlandés.
signature.asc
Description: This is a digitally signed message part