Por que o auto terminal completo às vezes não sugere nada para o comando 'services'?

16

Às vezes, quando digito um comando no terminal, o preenchimento automático do terminal não funciona, mesmo que meu comando não esteja errado.

Por exemplo, olhe para isto: sudo service vsftpd status sudo e serviço não tem nenhum problema. Quero dizer, quando você digita sud + o terminal tab sugere sudo ou eu digito servi + tab terminal completo para o serviço . Mas para o vsftpd eu não recebo nenhuma sugestão. Existe uma maneira de dizer: "terminal, por favor me diga alguma sugestão !!?".

    
por Mohammad Reza Rezwani 27.05.2014 / 21:02

5 respostas

28

O grau em que o preenchimento automático funciona é uma função de quão bem os scripts de shell no pacote bash-completion funcionam.

No Ubuntu 14.04, o script que lida com as conclusões de service está em /usr/share/bash-completion/bash_completion . Ele procura nomes de serviço como arquivos em /etc/rc.d/init.d e /etc/init.d e na saída de systemctl list-units --full --all .

Mas a instalação do pacote vsftpd não coloca nenhum arquivo em /etc/init.d , porque ele foi systemd -ified; Ele coloca um arquivo de configuração em /etc/systemd/system/vsftpd.service . systemctl list-units encontraria esse arquivo se não fosse o fato de que o Ubuntu, no momento, não inclui o comando systemctl .

Portanto, no momento, você não receberá conclusões automáticas para service vsftpd , mas usará a maioria dos outros serviços, pois os arquivos de configuração estão em /etc/init.d .

    
por Mark Plotnick 28.05.2014 / 01:38
9

Quando houver várias sugestões possíveis, a aba não produzirá nenhuma sugestão. Usando a aba a aba (aba dupla) irá produzir uma lista de todas as sugestões possíveis.

    
por dan08 27.05.2014 / 21:16
6

O vsftpd tem provavelmente mais de uma opção. tab duas vezes para ver as possibilidades.

Exemplo: li com aba aba mostra:

libnetcfg          line               lintian-info       lispmtopgm
libreoffice        linguist           linux32            listres
lightdm            link               linux64            
lightdm-session    lintian            linux-boot-prober  
    
por Rinzwind 27.05.2014 / 21:17
4

Você pode construir o seu próprio!

Por exemplo: coloque complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)' no bash do que se você tiver su e pressione tab / tab para todos os usuários, sim. Veja aqui

    
por elf12 28.05.2014 / 00:44
0

Descobri que systemctl list-units --full --all não lista serviços desabilitados, portanto, o preenchimento automático não

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>
    
por Lluís 14.02.2016 / 10:12