É um comportamento padrão do cd escolher automaticamente quando recebe um nome de diretório incompleto?

17

Tenho três pastas chamadas ProjectA, ProjectBe ProjectC. Quando eu tab-Complete cdpara cd Projecte imprensa Enter, ele escolhe ProjectC. Descobri que esse também é o caso de outros casos semelhantes; o padrão é o último em ordem lexicográfica (mas isso também pode ser alterado / adicionado mais recentemente).

Esse comportamento padrão esperado é para cd, ou eu defini algo por acidente aqui?

Estou executando o OSX 10.10.3, com o bash 4.3.

Rob Holt
fonte

Respostas:

18

Eu não encontro esse comportamento. Mas eu consegui reproduzi-lo. Talvez você tenha alterado acidentalmente a opção cdspell. Consulte o Manual de Referência do Bash :

cdspell

Se definido, erros menores na ortografia de um componente de diretório em um comando cd serão corrigidos. Os erros verificados são caracteres transpostos, um caractere ausente e um caractere em excesso. Se uma correção for encontrada, o caminho corrigido será impresso e o comando prosseguirá. Esta opção é usada apenas por shells interativos.

Eu tentei e sempre corrige o caminho no argumento fornecido cd. Se houver várias possibilidades, como na sua pasta ProjectA, com , ProjectBe ProjectC, o padrão é aquele que é o último na ordem do diretório. Você pode verificar isso por ls -U. Veja o exemplo:

user@host:~$ ls -Ul
total 0
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectA
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectB
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectC
user@host:~$ cd Project<tab><tab>
ProjectA/ ProjectB/ ProjectC/
user@host:~$ cd Project
ProjectC
user@host:~/ProjectC$

Para desativar esse comportamento, use:

shopt -u cdspell
caos
fonte
Interessante, mas por que escolher a última em ordem de diretório? Isso não parece estar documentado.
Faheem Mitha
Não consigo encontrar uma fonte para isso. No código-fonte do bash, existe uma função chamada spnameque retorna o nome do arquivo com a grafia correta. É inspiradothe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
caos
Parece um bug de documentação. Você provavelmente deve denunciá-lo ao bash. Se o fizer, você pode incluir um link para o bug na sua resposta.
Faheem Mitha
@chaos Ah, sim, eu vejo que eu shopt -s cdspellcoloquei no meu .bashrc(eu fiz várias cópias e colagens, tornando compatível um cross osx / linux .bashrce deveria ter prestado mais atenção obviamente). Na verdade, eu gosto, não consegui encontrar uma pesquisa para descobrir o porquê. Obrigado!
Rob Holt