Verifique o argumento antes da execução do programa

4

Tenho notado que, quando digito unzip no bash e pressiono a tecla tab , o preenchimento automático funciona apenas em arquivos com extensão .zip. Como isso é feito? E se eu quiser criar um programa que aceite apenas arquivos de imagem, como restringir o preenchimento automático a determinadas extensões (por exemplo, apenas em jpg e .png).

Isso é algum tipo de configuração do sistema ou uma configuração de programação que varia para idiomas (bash, C ++, python)?

    
por Buksy 28.02.2013 / 22:49

2 respostas

4

O próprio programa executa todos os nomes de arquivos que são passados para ele. A restrição para um sufixo .zip na conclusão não está relacionada ao que o programa faz. A conclusão é executada pelo shell. Quando você pressiona Tab , o shell analisa a linha de comando até certo ponto procura as regras de conclusão do contexto. Dependendo do shell, as regras de análise e conclusão do contexto podem ser mais ou menos complexas. Por exemplo, quando a linha de comando contém echo $P e você pressiona a tecla Tab , a maioria das camadas com a conclusão procura nomes de variáveis que começam com P . Por padrão, os shells completam os nomes dos arquivos, porque é um caso muito comum.

Bash, tcsh e zsh têm maneiras de tornar a conclusão programável: eles analisam o comando sob o cursor e procuram as regras para esse comando específico em uma tabela. Com a conclusão programável, a entrada na tabela para o programa unzip deve dizer que o primeiro argumento deve ser um arquivo .zip existente e os argumentos subsequentes devem ser nomes de membros do arquivo zip.

As regras de conclusão não estão contidas no próprio programa, mas elas podem ser enviadas juntamente com o programa no mesmo pacote. Por exemplo, um pacote que contém um comando /usr/bin/foo pode conter um arquivo /etc/bash_completion/foo que descreve como basear como concluir argumentos para o comando foo e um arquivo semelhante /usr/share/zsh/functions/Completion/_foo para zsh.

    
por 01.03.2013 / 02:12
4

A conclusão da linha de comando do Bash é personalizável por meio de scripts bash. No Gentoo Linux você pode facilmente gerenciar a conclusão que você gostaria de ter ativado usando o comando eselect bashcomp . Quando ativado, um link simbólico para todo o sistema é criado no diretório ~/.bash_completion.d/ . Você poderia usar esses scripts como um primeiro recurso para descobrir como o preenchimento automático é feito com o bash.

    
por 28.02.2013 / 23:08