sirve scripts script que programas programacion pasar parametros para manejo español ejemplos comandos cadenas bash shell autocomplete bash-completion

bash - scripts - ¿Cómo restablecer COMP_WORDBREAKS sin afectar a otro script de finalización?



scripts bash ejemplos (1)

La modificación de $COMP_WORDBREAKS en su secuencia de comandos de finalización no es la forma recomendada (ya que es una variable global y podría afectar el comportamiento de otras secuencias de comandos de finalización, por ejemplo, ssh).

Sin embargo, la finalización de bash ofrece algunos métodos de ayuda que puede utilizar para lograr su objetivo.

La forma recomendada de manejar los caracteres que no se separan de las palabras en palabras de terminación es mediante los dos métodos auxiliares:

  • _get_comp_words_by_ref con la opción -n EXCLUDE
    • obtiene la palabra para completar sin considerar los caracteres en EXCLUIR como saltos de palabra
  • __ltrim_colon_completions

Entonces, aquí hay un ejemplo básico de cómo manejar los dos puntos (:) en palabras de terminación:

_mytool() { local cur _get_comp_words_by_ref -n : cur # my implementation here COMPREPLY=( $(compgen ..........my_implement......... -- $cur) ) __ltrim_colon_completions "$cur" } complete -F _mytool mytool

Como consejo final, los métodos de ayuda se encuentran en /etc/bash_completion . Eche un vistazo para leer una descripción detallada de cada método y descubrir más métodos de ayuda.

Hay algo que me confunde cuando implemento una función de autocompletado de bash que la pondré en /etc/bash_completion.d/

Para lograr alguna característica, quiero eliminar los caracteres de separación de palabras dos puntos ( $COMP_WORDBREAKS de la variable $COMP_WORDBREAKS y agregar una barra ( / ) al comienzo de $COMP_WORDBREAKS .

COMP_WORDBREAKS=" /''><=;|&(" _mytool() { local cur=${COMP_WORDS[COMP_CWORD]} compopt -o nospace # my implement here COMPREPLY=( $(compgen ..........my_implement......... -- $cur) ) } complete -F _mytool mytool

Sin embargo, no puedo restablecer COMP_WORDBREAKS directamente porque el valor se comparte con otros scripts de finalización. En el momento en que se llama a la función de finalización, la matriz COMP_WORDS variable ya se ha completado, por lo que los cambios COMP_WORDBREAKS nivel local no tienen efecto.

¿Hay alguna solución para cambiar COMP_WORDBREAKS en una secuencia de comandos de finalización y no afecta a otra secuencia de comandos?

$ echo $BASH_VERSION 4.2.10(1)-release