Zsh завершение для всех исполняемых файлов в пути
Я написал скрипт, который сам принимает в качестве аргумента любой произвольный исполняемый файл в моем $PATH. Есть ли способ создать функцию завершения zsh (или bash), чтобы я мог набрать myFunc to[Tab]
и было бы завершено myFunc top
например? Выбор только файлов, которые имеют права на выполнение, был бы предпочтительнее, но наличие любого и каждого файла в $ PATH было бы более чем полезно!
Я не могу представить, что система будет иметь значение, но она будет работать на Linux, BSD и Mac.
Спасибо!
1 ответ
zsh
имеет функцию завершения для команд в PATH
названный _path_commands
, Вы можете настроить завершение, чтобы использовать его для myFunc
запустив:
compdef _path_commands myFunc
Примечание: для этого требуется, чтобы система завершения zsh была инициализирована. Обычно (как установлено compinstall
) это происходит в вашем ~/.zshrc
с
# some zstyle configurations
autoload -Uz compinit
compinit
Любые звонки compdef
нужно сделать после compinit
, Если вы получаете ошибки "команда не найдена" при запуске compdef
Предлагаю настроить систему завершения с compinstall
,
Примечание: для безопасности zsh будет выдавать ошибки, если какие-либо каталоги в вашем $ fpath доступны для записи во всем мире. Если вы получили ошибку:
zsh compinit: небезопасные каталоги, запустите compaudit для списка. Игнорировать небезопасные каталоги и продолжить [y] или прервать compinit [n]?
Не просто нажмите y, а нажмите n и попробуйте compaudit | xargs chmod g-w
как предложено в https://stackoverflow.com/questions/13762280/zsh-compinit-insecure-directories