Como funciona o preenchimento automático Bash?

8

Eu posso entender que a conclusão automática do bash funciona para utilitários padrão. Mas como é o preenchimento automático de programas personalizados, como o carregador do Oracle SQL?

No seguinte comando, se você Tab após control= , ele será automaticamente preenchido com o nome do arquivo de controle:

sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log

Como ele sabe que tem que preencher o arquivo de controle nesse ponto e não algum outro arquivo?

    
por Kshitiz Sharma 24.05.2015 / 16:59

1 resposta

6
conclusão programável do Bash funciona analisando a linha de comando e descobrindo o que está sendo concluído:

  1. Alguns contextos são tratados especialmente, por ex. a primeira palavra em um comando é concluída como um nome de comando, o que segue um $ é preenchido como um nome de variável, etc.
  2. Fora desses contextos, o bash tenta concluir o argumento de um comando e as configurações para o comando ou falha (que geralmente é o caso) do nome base do comando são aplicadas.

Por exemplo, depois de sqllTab , bash conclui os nomes dos comandos que começam com sqll . Após sqlldr $aTab , o bash completa os nomes das variáveis que começam com a . Após sqlldr Tab , o bash aplica as regras de conclusão para o comando sqlldr . As regras de conclusão podem especificar uma categoria (usuário, variável, arquivos etc.), um padrão de caractere curinga para nomes de arquivos ou uma função ou fragmento de código a ser executado.

As regras de preenchimento são definidas pelo complete embutido. Bash não controla quando o complete builtin foi chamado ou em qual script (se algum) ele estava. A maioria das distribuições envia o pacote bash-completion , que fornece uma série de regras para comandos comuns. Isso assume a forma de uma série de arquivos de script que contêm chamadas para complete , com um script que deve ser lido de .bashrc (ou /etc/bash.bashrc se implementado) para carregar todos esses scripts: geralmente . /etc/bash_completion é necessário para ativar a conclusão programável e carregar os scripts disponíveis.

O pacote padrão não inclui suporte para sqlldr . Se você tiver esse suporte, ele deve vir de uma fonte diferente. Essa fonte pode ter descartado um arquivo em um diretório como /etc/bash_completion.d ou pode vir com instruções para incluir algum código em .bashrc . Você pode usar complete -p sqlldr para ver as regras atuais para sqlldr ; como mencionado anteriormente, isso não lhe dirá onde essas regras foram carregadas.

O tcsh, o zsh e o fish possuem mecanismos parecidos (todos se inspiraram no tcsh), mas diferentes recursos, sintaxes e capacidades.

    
por 25.05.2015 / 00:49