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).