Sources Bugzilla – Bug 3266
ldd doesn't work when /bin/sh is dash
Last modified: 2010-08-09 18:38:47 UTC
The problem is in line 122:
122:if set -o pipefail 2> /dev/null; then
When dash hits the unknown pipefail option, it prints a diagnostic (which is
suppressed of course) and then exits. This appears to be well within the rights
of a compliant shell
though it's arguable whether the specific case of "set -o foo" is covered
(especially since the table entries aren't exactly explicit about their
meaning). Anyway, I mean to contact dash about this aswell but I didn't find a
mailing list or bug database - only got as far as here tonight.
As an aside, ldd also uses bash style $"" strings all over the place despite
claiming to be bourne compatible via #!/bin/sh (of course this still works in
dash you just get random $ signs in the output).
Then don't use dash. bash is the only supported shell.
Created attachment 1342 [details]
Fix ldd to rely on its proper interpreter
Works for me, so long as ldd stops claiming to be POSIX compatible.
Do you really think it is appropriate for the C runtime library to dictate which
shells need to be installed? That kind of dependency seems very backwards.
Note that one effect of this decision is to make ldd worthless on a busybox system.
Anyway, I have a much shorter, much cleaner patch:
# environments where the executed program might not have permissions
# to write to the console/tty. But only bash 3.x supports the pipefail
# option, and we don't bother to handle the case for older bash versions.
-if set -o pipefail 2> /dev/null; then
+if (set -o pipefail) 2> /dev/null; then
+ set -o pipefail
eval $add_env '"$@"' | cat
Stop reopening. bash is the only supported shell. Maintain your own changes if
you must but stop burdening others.
Just FYI -- I've never before reopened this bug. If you are finding that the
bug keeps being opened, then it is something that a lot of your users care
about, not the same user bugging you continually.
This is stupid.
i agree, that the assumption /bin/sh is bash continues to be deemed correct IS
incredibly stupid. "all the world's a vax" -> "all the shs are bash".
if you don't want to support other shells, that is FINE and understandable. just
ask the kernel for what you actually want, /bin/bash.