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

Другие вопросы по тегам