Estoy construyendo un script de finalización de bash para una herramienta que comparte la semántica de carga de archivos con curl.Cómo evitar que la finalización de bash reemplace un carácter cuando se completa la pestaña
Con rizo, que puede hacer:
archivo rizo -F var = @
para cargar un archivo.
Mi aplicación tiene una semántica similar y deseo poder mostrar los archivos posibles después de presionar '@'. Desafortunadamente, esto está resultando difícil:
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$cur" == @* && "$prev" == '=' ]]; then
COMPREPLY=($(compgen -f ${cur:1}))
return 0
fi
Así que si un comando (hasta ahora) termina con:
[email protected]
archivos en el directorio actual se mostrará.
[email protected]/usr/
/usr/bin /usr/games
Problema es si realmente presiono la pestaña para completar, ¡la '@' desaparece!
var=/usr/bin
Parece que bash reemplaza toda la palabra actual con el COMPREPLY tabulado.
La única manera de evitar este ha sido el de hacer esto:
COMPREPLY=($(compgen -f ${cur:1}))
for ((i=0; i<${#COMPREPLY[@]}; i++));
do
COMPREPLY[$i]='@'${COMPREPLY[$i]}
done
Pero ahora la implementación del tabulador parece extraño por decir lo menos:
@/usr/bin @/usr/games
¿Hay alguna forma para mostrar un archivo normal completar la pestaña (sin el prefijo '@') pero conservar la '@' cuando se toca la pestaña?
pregunta impresionante! Aprendí mucho respondiendo esto. – sanmiguel