Au lieu de continuer à commenter…
complete -f -X '!*.@(zip|udp)' unzip
devrait ajouter l'achèvement pour
-f -X '!*.@(zip|udp)'
| | | |||________|
| | | || |
| | | || +- filterpat: zip or udp
| | | |+------------- @ : Matches one of the given patterns
| | | +-------------- *. : Anything+<dot>
| | +---------------- ! : Negate
| +------------------- -X : Filter out matches in "filterpat"
+---------------------- -f : files
En d'autres termes: complétez les fichiers et supprimez tous ceux qui ne se terminent pas par .zipou .udp.
Suppléments
Si vous ajoutez la -o defaultcomplétion, tous les fichiers et répertoires seront complétés / correspondront s'il n'y a aucun fichier se terminant par .zipou .udp.
Si vous ajoutez -o plusdirsachèvement, vous ajouterez des répertoires en plus des correspondances de fichiers se terminant par .zipou .udp.
Courant
Lorsque vous utilisez, complete -p unzipvous obtenez le modèle actuel.
De vos commentaires il semble surtout que vous manquez soit +ou @dans le modèle, comme dans:
# Err:
complete -f -X '!*.(zip|udp)' unzip
|
+---- Missing + or @
ce qui signifierait correspondre à n'importe quel fichier se terminant littéralement par.(zip|udp) . Par exemple
touch 'file_test.(zip|udp)'
Jetez également un œil à cette section du manuel:
il est possible par exemple extglobn'est pas activé. Activer par:
shopt -s extglob
Vérifiez l'état actuel de tous les shoptparamètres en entrant:
shopt
Fonction
Si c'est le cas, -F somethingcela signifie qu'il utilise une fonction nommée quelque chose pour générer la liste des achèvements.
Il _filedir_xspecs'agit généralement d'une fonction Debian. Vous pourriez avoir quelque chose comme ça:
$ cat /etc/bash_completion
. /usr/share/bash-completion/bash_completion
Ce qui signifie /usr/share/bash-completion/bash_completionse sourcer. Vous trouverez ici la fonction en question . Quelques lignes plus loin, vous voyez que cette fonction / complétion est ajoutée par une fonction nommée _install_xspecpar exemple:
_install_xspec '!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])' unzip zipinfo
Entrées manuelles:
Mise à jour des commentaires 1:
- Aucune correspondance en raison d'archives non valides ou d'autorisations de fichiers.
Cela ne devrait pas affecter le résultat. completene correspond qu'aux fichiers fournis par les règles et ne fait aucun traitement des fichiers. Si vous pouvez les répertorier ls, ils doivent correspondre.
En remarque, on pourrait ajouter une telle fonctionnalité en utilisant une fonction complète:
function _unzip_validated() {
# 1. Generate list of files ending in e.g. .zip and .udp
# 2. Validate each file and remove invalid ones from file list.
}
complete -F _unzip_validated unzip
- Couleurs. Pourquoi ne lsdistinguer test.zipde test.upd?
Cela n'affecte pas complete. Les couleurs lssont fournies par $LS_COLORS. Essayer:
echo "$LS_COLORS" | tr : '\n' | sort
Vous devriez voir quelque chose comme *.zip=01;31ce qui signifie:
*.zip=01;31
|____| | |
| | +--- Red
| +------ Bold
+---------- Files with .zip extension
*.udp d'autre part n'a pas d'entrée associée, donc pas de coloration.
Étape suivante (aurait dû être la première)
- Ouvrez le terminal et accédez à un répertoire contenant des fichiers de test. .Zip et .udp
- Entrer
bash --norc
- Entrer
complete -f -X '!*.@(zip|udp)' unzip
- Entrer
shopt -s extglob
- Entrer
unzip <tab><tab>
Résultat?
Cliquez également sur modifier sous votre question et ajoutez la sortie de:
bind -V
shopt
env
pourrait être utile.
complete -p unzipdonnecomplete -f -X '!*.@(zip|udp)' unzipetunzip <tab>complète le fichier nommétest.zip. Cependant, le répertoire contient également un fichier nommétest.updqui n'est pas trouvé par la complétion de l'onglet deunzip. Le fait d'autorisations de fichier ou d'une longueur nulle du fichier peut-il expliquer ce comportement étrange?