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