Does anybody know why Fedora does this?

Mateusz Marzantowicz mmarzantowicz at osdf.com.pl
Thu Sep 12 11:43:55 UTC 2013


On 12.09.2013 02:01, Joe Zeff wrote:
> We all know, I hope, that cd is a built-in function of whatever shell
> you're using.
> 
> [joe at khorlia ~]$ cat /usr/bin/cd
> #!/bin/sh
> builtin cd "$@"
> [joe at khorlia ~]$
> 
> Does anybody know why this file exists?

I'm  not sure but it might be related to, form BASH NOTES file:


    There is a problem with the `makewhatis' script in older (pre-7.0)
    versions of Red Hat Linux.  Running `makewhatis' with bash-2.0 or
    later versions results in error messages like this:

    /usr/sbin/makewhatis: cd: manpath: No such file or directory
    /usr/sbin/makewhatis: manpath/whatis: No such file or directory
    chmod: manpath/whatis: No such file or directory
    /usr/sbin/makewhatis: cd: catpath: No such file or directory
    /usr/sbin/makewhatis: catpath/whatis: No such file or directory
    chmod: catpath/whatis: No such file or directory

    The problem is with `makewhatis'.  Red Hat (and possibly other
    Linux distributors) uses a construct like this in the code:

        eval path=$"$pages"path

    to do indirect variable expansion.  This `happened to work' in
    bash-1.14 and previous versions, but that was more an accident
    of implementation than anything else -- it was never supported
    and certainly is not portable.

    Bash-2.0 has a new feature that gives a new meaning to $"...".
    This is explained more completely in item 1 in the COMPAT file.

    The three lines in the `makewhatis' script that need to be changed
    look like this:

             eval $topath=$"$topath":$name
    [...]
       eval path=$"$pages"path
    [...]
    eval path=$"$pages"path

    The portable way to write this code is

             eval $topath="\$$topath":$name
       eval path="\$$pages"path
    eval path="\$$pages"path

    You could also experiment with another new bash feature: ${!var}.
    This does indirect variable expansion, making the use of eval
    unnecessary.


Mateusz Marzantowicz


More information about the users mailing list