Jaký je formát pro volbu -F _path_files a compadd ?
Do _path_files předávám několik adresářů :
_path_files -W "($base_directories)" -/
Ale některé z těch adresářových stromů nechci pro tento konkrétní příkaz dokončit.
Dokumentaci, kterou mohu najít pro _path_files říká, že přijímá -F možnost – stejně jako compadd , ale nemohu najít formát, ve kterém je předat.
Točení kolem také nebylo příliš plodné.
Zkoušel jsem například
_path_files -W "($base_directories)" -/ -F shared; # shared still shows up
_path_files -W "($base_directories)" -/ -F "(shared)"; # barfs on that guy
Přijatá odpověď:
To vypadá správně, pokud chcete ignorovat shared v kořenovém adresáři adresářového stromu, tj. pokud ignorujete jeden z $base_directories . Ale pokud jste chtěli ignorovat shared někde hlouběji v hierarchii potřebujete -F "(shared **shared)" . Vzory můžete také umístit do pole, což sníží potíže s citováním.
local -a ignored base_directories
base_directories=(…)
ignored=(shared '*/shared')
_path_files -W base_directories -/ -F ignored
Příklady jsou ve standardní distribuci v _cvs a _darcs .
Pokud to nepomůže, zkuste prozkoumat, co se děje, přidáním set -x a set +x kolem problematického kódu nebo setopt local_options xtrace (neboli set -x a měnit možnosti pouze po dobu trvání aktuální funkce).