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.