Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

cd bugs



POSIX requires cd to give output if a nonempty entry in CDPATH played a role, or
if 'cd -' was used.  Therefore, this line demonstrates two zsh bugs:

$ zsh -c 'emulate -R sh; cd /tmp; mkdir -p d; CDPATH=.; cd d; cd -; rmdir d'
$ bash -c 'cd /tmp; mkdir -p d; CDPATH=.; cd d; cd -; rmdir d'
/tmp/d
/tmp
$

while bash was correct in printing the absolute name of d and its parent.

When fixing this, be sure that you don't break

$ zsh -c 'emulate -R sh; mkdir foo; CDPATH=:; cd foo'

since POSIX states that particular use must remain silent (an implicit . used
from an empty CDPATH entry is different than an explicit . in CDPATH).

Another bug, mainly visible on platforms like cygwin where leading // is special
as allowed by POSIX (in particular, on my cygwin machin, //eblake exists but not
/eblake):

$ zsh -c 'emulate -R sh; CDPATH=///; cd eblake; /bin/pwd'
//eblake
$ bash -c 'CDPATH=///; cd eblake; /bin/pwd'
bash: line 0: cd: eblake: No such file or directory
/tmp
$

Since POSIX requires ///eblake to be synonymous with /eblake, and /eblake does
not exist, only bash was correct in printing an error and not changing location.

-- 
Eric Blake




Messages sorted by: Reverse Date, Date, Thread, Author