bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fix hang if $OLDPWD points to inaccessible directory


From: Mikulas Patocka
Subject: Re: [PATCH] Fix hang if $OLDPWD points to inaccessible directory
Date: Tue, 28 Nov 2017 01:00:13 +0100 (CET)
User-agent: Alpine 2.02 (DEB 1266 2009-07-14)


On Wed, 4 Oct 2017, Eduardo A. Bustamante López wrote:

> On Tue, Oct 03, 2017 at 10:29:08PM +0200, Mikulas Patocka wrote:
> > If $OLDPWD points to a non-existing directory, 'cd -' will fail.
> > But if we clear $OLDPWD, 'cd -' will fail too (with just different message).
> [...]
> 
> I performed the following tests:
> 
> 
>     dualbus@ubuntu:~$ for sh in mksh ksh93 dash zsh posh bash; do echo $sh \| 
> $(OLDPWD=/invalid $sh -c 'echo "$OLDPWD | "; cd -; echo " | $?"' 2>&1); done
>     mksh | /invalid | mksh: cd: /invalid: No such file or directory | 2
>     ksh93 | /invalid | ksh93: cd: /invalid: [No such file or directory] | 1
>     dash | /invalid | dash: 1: cd: can't cd to /invalid | 2
>     zsh | /home/dualbus | | 0
>     posh | /invalid | posh: cd: /invalid - No such file or directory | 1
>     bash | | bash: line 0: cd: OLDPWD not set | 1
> 
>     dualbus@ubuntu:~$ for sh in mksh ksh93 dash zsh posh bash; do echo $sh \| 
> $(OLDPWD=/tmp $sh -c 'echo "$OLDPWD | "; cd -; echo " | $?"' 2>&1); done
>     mksh | /tmp | /tmp | 0
>     ksh93 | /tmp | /tmp | 0
>     dash | /tmp | /tmp | 0
>     zsh | /home/dualbus | | 0
>     posh | /tmp | /tmp | 0
>     bash | /tmp | /tmp | 0
> 
> 
> So:
> 
> - Bash is the only major shell that performs stat() on OLDPWD to see if it's
>   going to import it from the environment or initialize it to an empty
>   value.
> 
> - Zsh doesn't import OLDPWD from the environment (bash's old behavior)
> 
> - The rest of the shells (mksh, ATT ksh, dash, posh) import OLDPWD from
>   the environment unconditionally.
> 
> - Mikulas already made the argument above of why this change wouldn't
>   break existing scripts that rely on bash performing the stat().
> 
> - I don't see a way around this behavior using existing bash features.
>   The value of OLDPWD can't be reset via BASH_ENV or other
>   initialization mechanisms. Sure, `unset OLDPWD; program' might work,
>   but I wouldn't call that a solution.
> 
> 
> Given the above, I've changed my mind, and I think this patch should be
> fine :-)

Hi

Will you commit my patch? - if you agree with it.

Mikulas


reply via email to

[Prev in Thread] Current Thread [Next in Thread]