Package: dash
Version: 0.5.5.1-7.4
Severity: normal
Steps to reproduce:
$ cat /tmp/test.sh
false
. /dev/null
echo $?
$ dash /tmp/test.sh
1
$ bash /tmp/test.sh
0
The only reference I can find to POSIX behaviour of "." says[1]:
EXIT STATUS: Returns the value of the last command executed, or a zero
exit status if no command is executed.
In the above example, no command is executed (since /dev/null is empty) but the
resulting exit status is not zero; in fact, it's left-over from the invocation
of "false". For the record, "busybox sh" behaves the same way as dash, as does
posh.
I came across this problem in a script that used "set -e". Here's
a slightly less minimal test-case:
$ cat /tmp/test2.sh
set -e
if false; then
echo "hello"
else
. /dev/null
fi
$ dash /tmp/test2.sh; echo $?
1
The "." builtin is treated as having failed, even though it was the condition
of the if statement that set $? to a non-zero value.
[1] http://pubs.opengroup.org/onlinepubs/009695399/utilities/dot.html
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.30-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages dash depends on:
ii debianutils 3.4.4 Miscellaneous utilities specific t
ii dpkg 1.15.8.10 Debian package management system
ii libc6 2.11.2-11 Embedded GNU C Library: Shared lib
dash recommends no packages.
dash suggests no packages.
-- debconf information:
* dash/sh: true
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]