zsh conclusão para todos os executáveis no caminho

0

Eu escrevi um script que leva como argumento qualquer executável arbitrário em meu $ PATH. Existe uma maneira de criar uma função de conclusão zsh (ou bash) de forma que eu possa digitar myFunc to[Tab] e concluir a myFunc top , por exemplo? Selecionar apenas arquivos com permissões executáveis seria preferível, mas ter qualquer arquivo em $ PATH seria mais que útil!

Não consigo imaginar que o sistema importaria, mas isso seria executado no Linux, no BSD e no Mac.

Obrigado!

    
por ebrious 18.03.2015 / 02:44

1 resposta

2

zsh tem uma função de conclusão para comandos em PATH named _path_commands . Você pode configurar a conclusão para usá-lo para myFunc executando:

compdef _path_commands myFunc

Nota: isto requer que o sistema de completação do zsh seja inicializado. Normalmente (como configurado por compinstall ) isso acontece no seu ~/.zshrc com

# some zstyle configurations

autoload -Uz compinit
compinit

Todas as chamadas para compdef precisam ser feitas depois de compinit . Se você receber erros de "comando não encontrado" ao executar compdef , sugiro configurar o sistema de conclusão com compinstall .

Nota: para segurança, o zsh irá gerar erros se algum diretório em seu $ fpath for gravável por todos. Se você receber o erro:

zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?

Não simplesmente pressione y, mas pressione n e tente compaudit | xargs chmod g-w conforme sugerido em link

    
por 18.03.2015 / 13:47