J'essaie d'utiliser la fonction bash complete pour afficher les différentes options d'une commande.
J'ai des problèmes quand une option contient un chemin comme dans -F/dev/null
.
Actuellement, j'utilise
#!/bin/bash
_xyz-completion ()
{
local cur
COMPREPLY=() # Array variable storing the possible completions.
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-oOption1 -F/dev/null" -- $cur ) )
;;
esac
return 0
}
complete -F _xyz-completion -o filenames xyz
Si -F
a déjà été tapé, alors un Tab l'achève avec succès.
Mais si seulement -
a été tapé, puis un Tab montre
null -oOption1
Mais je m'attends à voir
-F/dev/null -oOption1
J'ai déjà essayé -F\/dev\/null
, -F//dev//null
, "-F/dev/null"
y -F\\\/dev\\\/null
Il semble qu'il s'agisse uniquement d'un problème d'affichage, car l'achèvement lui-même fonctionne comme prévu.
Je ne vois pas comment échapper de manière appropriée les slashs dans `-F/dev/null`.
Pour commenter les commentaires :
1)
Peu importe, c'est aussi un problème si -F est remplacé par une non-option comme -Q. - Benjamin W.
Ce n'est pas un problème, que le -F
semble être une option pour complete
lui-même, car il échoue même si je le change en xOPTION1 xF/dev/null
2)
Je me demande ce que compgen -W "-oOption1 -F/dev/null" -- - affiche pour vous.
Il affiche (comme prévu)
-oOption1
-F/dev/null
Comme indiqué, -F
s'achève avec succès sur -F/dev/null