From: Stefano Lattarini Date: Sat, 5 Dec 2009 11:56:30 +0000 (+0100) Subject: Document Solaris/Heirloom sh set -e issue with command substitutions. X-Git-Tag: v2.66~112 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4fdf04459e9d11b51e971f9af3451fa56fd44a9;p=thirdparty%2Fautoconf.git Document Solaris/Heirloom sh set -e issue with command substitutions. * doc/autoconf.texi (Limitations of Builtins): Fix typos `set -d' in previous example. Document failure to honor && lists with set -e and a command substitution in the failing command. Report and initial patch by Stefano Lattarini against Automake. Signed-off-by: Ralf Wildenhues --- diff --git a/ChangeLog b/ChangeLog index e03604d6..1c0c6120 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-12-05 Stefano Lattarini + Ralf Wildenhues + + Document Solaris/Heirloom sh set -e issue with command substitutions. + * doc/autoconf.texi (Limitations of Builtins): Fix typos `set -d' + in previous example. Document failure to honor && lists with set -e + and a command substitution in the failing command. + Report and initial patch by Stefano Lattarini against Automake. + 2009-12-04 Eric Blake Warn if using unnamed diversion. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 7d2c72ea..3144610a 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -16794,12 +16794,23 @@ When @samp{set -e} is in effect, a failed command substitution in Solaris @command{/bin/sh} cannot be ignored, even with @samp{||}. @example -$ @kbd{/bin/sh -c 'set -d; foo=`false` || echo foo; echo bar'} -$ @kbd{bash -c 'set -d; foo=`false` || echo foo; echo bar'} +$ @kbd{/bin/sh -c 'set -e; foo=`false` || echo foo; echo bar'} +$ @kbd{bash -c 'set -e; foo=`false` || echo foo; echo bar'} foo bar @end example +@noindent +Moreover, a command substitution, successful or not, causes this shell to +exit from a failing outer command even in presence of an @samp{&&} list: + +@example +$ @kbd{bash -c 'set -e; false `true` && echo notreached; echo ok'} +ok +$ @kbd{sh -c 'set -e; false `true` && echo notreached; echo ok'} +$ +@end example + Portable scripts should not use @samp{set -e} if @command{trap} is used to install an exit handler. This is because Tru64/OSF 5.1 @command{sh} sometimes enters the trap handler with the exit status of the command