È un comportamento standard per cd scegliere automaticamente quando viene assegnato un nome di directory incompleto?


17

Ho tre cartelle chiamate ProjectA, ProjectBe ProjectC. Quando ho tab-Complete cda cd Projecte premere Enter, sceglie ProjectC. Ho scoperto che questo è anche il caso di altri casi simili; per impostazione predefinita è l'ultimo in ordine lessicografico (ma questo può anche essere modificato / aggiunto di recente).

È previsto questo comportamento predefinito cdo ho impostato qualcosa per caso qui?

Sto eseguendo OSX 10.10.3, con bash 4.3.

Risposte:


18

Non ho questo comportamento. Ma sono stato in grado di riprodurlo. Forse hai modificato accidentalmente l'opzione cdspell. Vedi il manuale di riferimento di Bash :

cdspell

Se impostato, gli errori minori nell'ortografia di un componente della directory in un comando cd verranno corretti. Gli errori controllati sono caratteri trasposti, un carattere mancante e un carattere di troppo. Se viene trovata una correzione, viene stampato il percorso corretto e il comando procede. Questa opzione è utilizzata solo da shell interattive.

L'ho provato e corregge sempre il percorso nell'argomento dato cd. Se ci sono più possibilità come nella tua cartella con ProjectA, ProjectBe ProjectC, per impostazione predefinita è quella che è l'ultima nell'ordine della directory. Puoi verificarlo entro ls -U. Vedi l'esempio:

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$

Per disabilitare quel comportamento usare:

shopt -u cdspell

Interessante, ma perché sceglie quello che è l'ultimo nell'ordine della directory? Questo non sembra essere documentato.
Faheem Mitha,

Non riesco a trovare una fonte per questo. Nel codice sorgente di bash esiste una funzione chiamata spnameche restituisce il nome file digitato correttamente. È ispirato athe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
caos,

Sembra un bug di documentazione. Probabilmente dovresti segnalarlo a Bash. Se lo fai, potresti includere un link al bug nella tua risposta.
Faheem Mitha,

@chaos Ah sì, vedo di aver shopt -s cdspellimpostato il mio .bashrc(ho fatto un sacco di copia e incolla rendendo un cross osx / linux compatibile .bashrce ovviamente avrei dovuto prestare più attenzione). In realtà mi piace, non sono riuscito a trovare una ricerca per scoprire perché. Grazie!
Rob Holt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.