Porque os manuais estão errados .
A shell '93 Korn também está errada.
A única Especificação Unix de 1997 diz:
If the directory operand does not begin with a slash (/
) character, and the first component is not dot or dot-dot,cd
will search for directory relative to each directory named in theCDPATH
variable, in the order listed.
A Especificação Unix Única de 2016 diz o mesmo de uma maneira diferente e um pouco redundante:
3. If the directory operand begins with a <slash> character, setcurpath
to the operand and proceed to step 7.4. If the first component of the directory operand is dot or dot-dot, proceed to step 6.
[…]
6. Set
curpath
to the directory operand.
Nenhum dos manuais menciona a parte sobre .
e ..
, mas isso é o que toda casca além da shell '93 Korn está realmente fazendo, apesar do que seus manuais dizem:
% export CDPATH=/tmp: % lksh -c 'cd wibble' /tmp/wibble % dash -c 'cd wibble' /tmp/wibble % posh -c 'cd wibble' /tmp/wibble % bash -c 'cd wibble' /tmp/wibble % mksh -c 'cd wibble' /tmp/wibble % zsh -c 'cd wibble ; pwd' /tmp/wibble %