This patch makes ldd work with any shell. Ash doesn't continue after a set -o blah. The used method correctly identifies bash 3 and higher. Patch is tested with bash, zsh, ash and pdksh. --- ldd.orig 2005-03-29 12:35:17.820676992 +0200 +++ ldd 2005-03-29 12:34:36.324985296 +0200 @@ -1,4 +1,4 @@ -#! /bin/bash +#! /bin/sh # Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc. # This file is part of the GNU C Library. @@ -116,10 +116,12 @@ fi # The following use of cat is needed to make ldd work in SELinux -# 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 +# 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 [ "${BASH_VERSION%%.*}" -ge 3 ]; then + set -o pipefail try_trace() { eval $add_env '"$@"' | cat }
*** Bug 807 has been marked as a duplicate of this bug. ***
ldd is written for bash. Live with it.
If ash stops after "set -o foo", it should be fixed. Please report it to ash maintainers.
No: There is nothing wrong with ash, this is POSIX behaviour. http://www.opengroup.org/onlinepubs/007908799/xcu/chap2.html#tag_001_008_001 There is something wrong with bash. This is a typical case of embrace and extend of the guy who has written bash, and so far all developers have applied my patches that remove bashisms. I don't care if people write them, mistakes are made everywhere but I'm really appalled by your Microsoft-like responses. Especially since you don't loose any functionality if you apply my patch and you are forced to use bash if you don't.
Reopening, with a patch on the way to the mailing list.
*** Bug 3266 has been marked as a duplicate of this bug. ***
should be fixed for glibc-2.19