Apa format untuk opsi -F dari _path_files dan compadd ?
Saya melewati beberapa direktori ke _path_files :
_path_files -W "($base_directories)" -/
Tetapi beberapa pohon direktori tersebut tidak ingin saya selesaikan untuk perintah khusus ini.
Dokumentasi yang dapat saya temukan untuk _path_files mengatakan menerima -F opsi—seperti compadd , tetapi saya tidak dapat menemukan format untuk meneruskannya.
Berputar-putar juga tidak membuahkan hasil.
Saya sudah mencoba, misalnya,
_path_files -W "($base_directories)" -/ -F shared; # shared still shows up
_path_files -W "($base_directories)" -/ -F "(shared)"; # barfs on that guy
Jawaban yang Diterima:
Itu terlihat benar jika Anda ingin mengabaikan shared di akar pohon direktori, yaitu jika Anda mengabaikan salah satu $base_directories . Tetapi jika Anda bermaksud mengabaikan shared di suatu tempat yang lebih dalam dalam hierarki, Anda memerlukan -F "(shared **shared)" . Anda juga dapat menempatkan pola dalam array, yang akan mengurangi kesulitan mengutip.
local -a ignored base_directories
base_directories=(…)
ignored=(shared '*/shared')
_path_files -W base_directories -/ -F ignored
Ada contoh dalam distribusi standar di _cvs dan _darcs .
Jika ini tidak membantu, coba selidiki apa yang terjadi dengan menambahkan set -x dan set +x di sekitar kode yang bermasalah, atau setopt local_options xtrace (alias set -x dan ubah opsi hanya selama fungsi saat ini).