Por que há && após algumas definições de função no arquivo de conclusão do bash?

1

Se você olhar para os arquivos /usr/share/bash-completion/completions/* muitos têm a definição da função seguida por && complete -F (pelo menos no Xenial). Por que isso acontece?

A notação tem algum significado especial no arquivo de conclusão do bash?

No bash, não vejo nenhuma diferença funcional entre os scripts

a(){ echo in;return 1;} && a

e

a(){ echo in;return 1;}; a
    
por jarno 19.11.2016 / 05:24

2 respostas

1

Manual de referência do Bash diz

  

O status de saída de uma definição de função é zero, a menos que um erro de sintaxe ocorra ou uma função readonly com o mesmo nome já exista. Quando executado, o status de saída de uma função é o status de saída do último comando executado no corpo.

O erro de sintaxe pode terminar a execução do script antes do comando complete -F , portanto o comando após a declaração da função pode não ser executado de qualquer maneira, mas se uma função readonly com o mesmo nome for declarada antes de obter o arquivo contendo a função, terminar a execução. Para evitar que uma função errada de conclusão do bash seja chamada, um teste AND tão lógico é usado.

    
por jarno 20.11.2016 / 11:12
0

complete é um bash embutido, que diz bash como preencher automaticamente em várias situações. Em particular, complete -F funcname cmdname informa bash que, se o usuário tiver inserido o comando cmdname , a conclusão dos argumentos deve ser tratado pela função funcname . Use help complete e man bash para mais informações. Muitos arquivos de preenchimento automático instalados pelo sistema instalam funções de autocompletar usando o padrão

_cmd_name () {
  ... compute completions here and assign them to COMPREPLY ...
  return 0
} && complete -F _cmd_name cmd_name

Por exemplo,

_apt_get () {
  ... compute completions here and assign them to COMPREPLY ...
  return 0
} && complete -F _apt_get apt-get

que diz bash que, se o usuário tiver o tipo apt-get como o nome do comando, o preenchimento automático será tratado pela função _apt_get .

É puramente uma questão de estilo de codificação, e esse estilo não é feio ou difícil de entender.

    
por AlexP 19.11.2016 / 09:17