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 .zip
ou .udp
.
Suppléments
Si vous ajoutez la -o default
complétion, tous les fichiers et répertoires seront complétés / correspondront s'il n'y a aucun fichier se terminant par .zip
ou .udp
.
Si vous ajoutez -o plusdirs
achèvement, vous ajouterez des répertoires en plus des correspondances de fichiers se terminant par .zip
ou .udp
.
Courant
Lorsque vous utilisez, complete -p unzip
vous 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 extglob
n'est pas activé. Activer par:
shopt -s extglob
Vérifiez l'état actuel de tous les shopt
paramètres en entrant:
shopt
Fonction
Si c'est le cas, -F something
cela signifie qu'il utilise une fonction nommée quelque chose pour générer la liste des achèvements.
Il _filedir_xspec
s'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_completion
se 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_xspec
par 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. complete
ne 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 ls
distinguer test.zip
de test.upd
?
Cela n'affecte pas complete
. Les couleurs ls
sont fournies par $LS_COLORS
. Essayer:
echo "$LS_COLORS" | tr : '\n' | sort
Vous devriez voir quelque chose comme *.zip=01;31
ce 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 unzip
donnecomplete -f -X '!*.@(zip|udp)' unzip
etunzip <tab>
complète le fichier nommétest.zip
. Cependant, le répertoire contient également un fichier nommétest.upd
qui 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?