Welches Format hat die Option -F von _path_files
und compadd
?
Ich übergebe mehrere Verzeichnisse an _path_files
:
_path_files -W "($base_directories)" -/
Aber einige dieser Verzeichnisbäume möchte ich für diesen speziellen Befehl nicht vervollständigen.
Die Dokumentation kann ich für _path_files
finden sagt, dass es ein -F
akzeptiert Option – genau wie compadd
, aber ich kann das Format nicht finden, um sie zu übergeben.
Herumspielen war auch nicht sehr fruchtbar.
Ich habe zum Beispiel versucht,
_path_files -W "($base_directories)" -/ -F shared; # shared still shows up
_path_files -W "($base_directories)" -/ -F "(shared)"; # barfs on that guy
Akzeptierte Antwort:
Das sieht richtig aus, wenn Sie shared
ignorieren wollen an der Wurzel des Verzeichnisbaums, d. h. wenn Sie eines der $base_directories
ignorieren . Aber wenn Sie shared
ignorieren wollten irgendwo tiefer in der Hierarchie brauchen Sie -F "(shared **shared)"
. Sie können die Muster auch in einem Array ablegen, was den Zitieraufwand reduziert.
local -a ignored base_directories
base_directories=(…)
ignored=(shared '*/shared')
_path_files -W base_directories -/ -F ignored
Beispiele gibt es in der Standarddistribution in _cvs
und _darcs
.
Wenn dies nicht hilft, versuchen Sie zu untersuchen, was vor sich geht, indem Sie set -x
hinzufügen und set +x
um den problematischen Code herum, oder setopt local_options xtrace
(alias set -x
und Optionen nur für die Dauer der aktuellen Funktion ändern).