Isto é devido ao recurso de conclusão programável do shell que você está usando.
Se você estiver satisfeito com a conclusão básica da guia para comandos e nomes de arquivos em bash
, execute
complete -r
no seu ~/.bashrc
removerá qualquer conclusão "fantasia" (programável) que envolva chamar funções etc. no ambiente atual do shell.
A conclusão básica do nome do arquivo (como o que você está fazendo nos exemplos da pergunta) ainda funcionará depois de desligar a conclusão programável.
A conclusão programável está disponível em alguns shells e permite conectar funções de retorno de chamada que examinam o estado da linha de comando, etc., para descobrir quais sequências possíveis o usuário pode querer inserir em seguida. Por exemplo, digitar ssh
e, em seguida, Espaço e Tab pode invocar uma função que analisa seu arquivo ~/.ssh/config
para possíveis nomes de host para se conectar ou digitar git checkout
e então o Espaço e a Tab podem fazer com que uma função execute um comando git
para descobrir quais ramificações estão disponíveis no repositório atual.
Alguns usuários contam com conclusões programáveis por motivos de velocidade e / ou produtividade, mas sim, se você tiver set -x
ativo na sessão do shell interativa, essas ações produzirão saída de rastreio no terminal.
Eu nunca fui amigo da conclusão programável em nenhum shell, já que não quero uma simples tecla Tab para fazer "mágica nas minhas costas" . Eu também acho que é um pouco preguiçoso, mas essa definitivamente é apenas minha opinião pessoal.