Я написал скрипт, который сам принимает в качестве аргумента любой произвольный исполняемый файл в моем $ PATH. Есть ли способ создать функцию завершения zsh (или bash), чтобы я мог набрать myFunc to[Tab] и завершить, например, до myFunc top ? Выбор только файлов, которые имеют права на выполнение, был бы предпочтительнее, но наличие любого и каждого файла в $ PATH было бы более чем полезно!

Я не могу представить, что система будет иметь значение, но она будет работать на Linux, BSD и Mac.

Спасибо!

1 ответ1

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .