Conclusão ao colar o comando Bash começando com as abas

3

Estou escrevendo um Dockerfile que estou formatando usando guias (que geralmente uso em todos os lugares).

Mas copiei um comando de várias linhas onde a segunda linha começa com dois caracteres de tabulação, por exemplo:

apt-get -y update && \
    apt-get -y install collectd \ # begin two tabs

A primeira linha é executada corretamente, mas a segunda linha tenta "autocompletar", mostra todos os comandos possíveis e, em seguida:

> stall collectd
# [ apt-get updating ]
bash: stall: command not found

Eu entendo o comportamento "autocompletar", mas stall collectd ? Por que o Bash come a parte apt-get -y in ?

    
por lucasvc 10.06.2015 / 10:09

2 respostas

3

A resposta do caos explica claramente como desabilitar esse comportamento, mas interpretei essa questão como motivada pela curiosidade sobre o que aconteceu para a primeira parte do comando apt-get :

Se você digitar duas guias, o Bash perguntará se você deseja,

Display all 5177 possibilities? (y or n)?

Note que o número de possibilidades depende do seu próprio ambiente.

Se você tivesse que responder com qualquer um dos caracteres na string apt-get - , o Bash os ignoraria, pois só quer um sim ou um não. Quando recebe o y , exibe todas as possibilidades.

Nas versões modernas do Bash, essa lista é exibida em um pager que tem um prompt More? na parte inferior. O pager usa o caractere de espaço para rolar uma página, ignora o seguinte i , mas o próximo caractere, n é interpretado como um "Não" para sair do pager.

Finalmente, os caracteres restantes, stall collectd , são interpretados pelo shell como um comando.

    
por 10.06.2015 / 10:30
5

Você pode desativar o comportamento de conclusão de bash ao pressionar a tecla guia :

bind 'set disable-completion on'

Agora, a tecla tab apenas recua a linha como dentro de um editor. Isso é apenas temporário. Na próxima sessão de shell, não está definido. Se você quiser ot torná-lo permanente, adicione isso ao seu ~/.inputrc .

Para reativar a tecla , use a tecla :

bind 'set disable-completion off'
    
por 10.06.2015 / 10:24