Perguntando bash para produzir resposta de conclusão para um comando?

1

Estou escrevendo um utilitário CLI chamado envset , que tem esse uso: envset [ENVSET-OPTIONS] [SETNAME] [--] [CMD] [ARGS]... .
Basicamente, ele executa um comando com um conjunto de variáveis de ambiente definidas em um arquivo de configuração (já existe um pacote npm com o mesmo nome , mas estou implementando meu utilitário em Perl com um conjunto de recursos diferente).

Eu quero fornecer a conclusão da guia para envset . A conclusão é tratada por uma função do shell _envset . Seria bom no caso como abaixo ( ^ indica a localização do cursor quando Tab é pressionado):

% envset mycolors -- ls -^

_envset pode retornar as respostas de conclusão para ls (portanto, retorne uma lista de possíveis opções de linha de comando ls). Existe uma maneira fácil que eu possa pedir bash para devolvê-los para mim?

Caso contrário, eu teria que fazer algo como o seguinte em _envset (que não é perfeito, mas deve ser bom o suficiente para a maioria dos casos):

  1. analise a saída de complete para encontrar uma entrada que descreva como um comando (no exemplo acima, ls ) foi concluído. Se não houver nenhum, localize a entrada com -D (manipulador padrão).

  2. se o comando for completado pela função (-F), chame essa função (depois de ajustar COMP_WORDS e COMP_CWORD apropriadamente). Retorna o COMPRELICE da função.

  3. se o comando for completado pelo comando externo (-C), execute o comando (depois de ajustar COMP_LINE e COMP_POINT apropriadamente). Capture as linhas de saída e configure COMPRELICE.

  4. e assim por diante para cada um dos outros tipos de manipuladores (-W, -G, etc). Eu acho que lidar com -F, -C, -W e -A deve cobrir a maioria dos casos.

  5. para o manipulador padrão, há um caso especial dele retornando 124, o que significa que devemos reiniciar a partir da etapa 1 para ver se o manipulador definiu complete para nosso comando desejado.

por Gerry Lufwansa 05.08.2017 / 08:33

0 respostas