
Estou escrevendo um Dockerfile
que estou formatando usando abas (que costumo usar em qualquer lugar).
Mas copiei um comando de várias linhas em que a segunda linha começa com dois caracteres de tabulação, ou seja:
apt-get -y update && \
apt-get -y install collectd \ # begin two tabs
A primeira linha é executada corretamente, mas a segunda linha tenta "preencher automaticamente", mostrar todos os comandos possíveis e então:
> stall collectd
# [ apt-get updating ]
bash: stall: command not found
Eu entendo o comportamento de "preenchimento automático", mas stall collectd
? Por que Bash come a apt-get -y in
parte?
Responder1
A resposta do caosexplica claramente como desabilitar esse comportamento, mas interpretei essa pergunta como sendo motivada pela curiosidade sobre o que aconteceu com a primeira parte do apt-get
comando:
Se você digitasse duas guias, o Bash perguntaria se você deseja,
Exibir todas as 5177 possibilidades? (s ou n)?
Observe que o número de possibilidades depende do seu próprio ambiente.
Se você respondesse com qualquer um dos caracteres da string apt-get -
, o Bash os ignoraria, pois só quer um sim ou um não. Quando obtém o y
, exibe todas as possibilidades.
Nas versões modernas do Bash, esta lista é exibida em um pager que possui um More?
prompt na parte inferior. O pager usa o caractere de espaço para rolar uma página para baixo, ignora o seguinte, i
mas o próximo caractere n
é interpretado como “Não” para sair do pager.
Finalmente, os caracteres restantes stall collectd
são interpretados pelo shell como um comando.
Responder2
Você pode desativar o comportamento de conclusão bash
ao pressionar a tabtecla:
bind 'set disable-completion on'
Agora, a tabchave apenas recua a linha como dentro de um editor. Isto é apenas temporário. Na próxima sessão do shell, ele não está definido. Se você quiser torná-lo permanente, adicione-o ao seu arquivo ~/.inputrc
.
Para reativar o tabuso da chave:
bind 'set disable-completion off'