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

Re: `cd .` in non-existent directory leads into weird corner case



On 3 April 2012 11:57, Peter Stephenson <Peter.Stephenson@xxxxxxx> wrote:
> On Mon, 2 Apr 2012 13:10:17 +0200
> Mikael Magnusson <mikachu@xxxxxxxxx> wrote:
>> One (semi-)realistic case I came up with, one shell sits in a
>> directory, someone else first moves the directory, then deletes it,
>> then the shell tries to 'cd ..'. In this case I would like it to end
>> up in the new parent directory as it does now [1], not the old
>> "$PWD:h". (with chasedots/-P) (and even if I did 'cd .' first for some
>> weird reason).
>
> Hmmm... when I read this before I concentrated on "as it does now" and
> skipped the "not the old $PWD:h".  I don't see how that can work.
> You're saying we should use the physical directory to find its parent
> even though it doesn't exist any more.
>
> Are you saying you think the shell currently has some magic to do
> this?  It seems to violate the laws of physics, unless we recorded
> the physical directory as a second PWD just on the off chance someone
> deletes the current one, which seems silly.

I don't know if this is something that works on all systems, but on
linux at least, it seems that the directory inode sticks around while
a process still has it, or any subdirectory of it, as its current
directory (or otherwise open i suppose). This means that it is still
possible to access the . and .. entries in it, and follow them via
chdir(), see the transcripts in my other mail where it even works from
a second shell going into the dir via 'cd /proc/$firstshell/cwd' and
then doing 'cd -P ..'.

If the system doesn't keep the '..' entry around, I'm not demanding
that cd -P .. should work as I described :).

-- 
Mikael Magnusson



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