bash_completion para initscripts

4

Eu escrevi meu próprio script de inicialização /etc/init.d/myscript . Eu posso começar e parar meu script com o comando de serviço

service myscript start
service myscript stop

Quando digito service <TAB> , bash_completion exibe todos os meus initscripts de /etc/init.d/ , incluindo myscript . Mas quando eu digito service myscript <TAB> nada acontece. Eu gostaria que o bash_completion me oferecesse start , stop como com outros initscripts. Por exemplo, bash_completion funciona para service cups <TAB> , mas não sei onde isso está definido. Não há /usr/share/bash-completion/completions/cups ou /etc/bash_completion.d/cups . Então, de onde service obtém as informações? Onde devo adicionar minhas informações de script?

    
por Martin Vegter 18.11.2013 / 22:22

1 resposta

3

Em versões anteriores de bash-completion , como a disponível para o CentOS no repositório EPEL, há scripts individuais para serviços sysvinit em /usr/share/bash-completion/ . Neste caso, você pode querer adicionar scripts adicionais lá com base em um exemplo como o preenchimento de copos.

Em sistemas mais novos, como meu Fedora 19, o bash-completion vem com as funções _service() e _services() no script principal /usr/share/bash-completion/bash-completion , ele fornece as ações start e stop por padrão para qualquer instalação serviço. Deve funcionar fora da caixa.

Se você também quiser dar suporte a mais ações, adicione uma ação de uso como esta:

 *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"

O script analisará essa cadeia e concluirá o status , restart e assim por diante. Isso pressupõe que você esteja usando uma declaração de caso como essa para gerenciar o argumento de ação:

case $1 in
   start)
   [...]
   ;;
   stop)
   [...]
   ;;
   status)
   [...]
   ;;
   *)
      echo $"Usage: $0 {start|stop|status}"
esac
    
por 19.11.2013 / 00:43