* doc/autoconf.texi (Shell Functions): Document ksh93 limitation. Signed-off-by: Eric Blake <[email protected]> ---
I'm pushing both of these. ChangeLog | 5 +++++ doc/autoconf.texi | 28 +++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2cbd690..3d3ace6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-03 Eric Blake <[email protected]> + + docs: mention ksh bug with function syntax + * doc/autoconf.texi (Shell Functions): Document ksh93 limitation. + 2010-08-03 Ralf Wildenhues <[email protected]> Fix typo in Autotest color test, for dash testsuite failure. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index df0e298..e292062 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -16202,6 +16202,20 @@ Shell Functions Nowadays, it is difficult to find a shell that does not support shell functions at all. However, some differences should be expected. +When declaring a shell function, you must include whitespace between the +...@samp{)} after the function name and the start of the compound +expression, to avoid upsetting @command{ksh}. While it is possible to +use any compound command, most scripts use @sa...@{@dot...@}}. + +...@example +$ @kbd{/bin/sh -c 'a()@{ echo hi;@}; a'} +hi +$ @kbd{ksh -c 'a()@{ echo hi;@}; a'} +ksh: syntax error at line 1: `...@}' unexpected +$ @kbd{ksh -c 'a() @{ echo hi;@}; a'} +hi +...@end example + Inside a shell function, you should not rely on the error status of a subshell if the last command of that subshell was @code{exit} or @code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to @@ -16213,10 +16227,10 @@ Shell Functions command in a @command{trap} handler can cause problems. @example -$ @kbd{bash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?} +$ @kbd{bash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?} 2 2 -$ @kbd{ash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?} +$ @kbd{ash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?} 0 2 @end example @@ -16231,8 +16245,8 @@ Shell Functions @samp{set -e}, for example with Solaris 10 @command{bin/sh}: @example -$ @kbd{bash -c 'f()@{ return 1; @}; set -e; f; echo oops} -$ @kbd{/bin/sh -c 'f()@{ return 1; @}; set -e; f; echo oops} +$ @kbd{bash -c 'f() @{ return 1; @}; set -e; f; echo oops} +$ @kbd{/bin/sh -c 'f() @{ return 1; @}; set -e; f; echo oops} oops @end example @@ -16259,13 +16273,13 @@ Shell Functions affect the current environment in the same manner as special built-ins. @example -$ @kbd{/bin/sh -c 'func()@{ echo $a;@}; a=1 func; echo $a'} +$ @kbd{/bin/sh -c 'func() @{ echo $a;@}; a=1 func; echo $a'} @result{} @result{} -$ @kbd{ash -c 'func()@{ echo $a;@}; a=1 func; echo $a'} +$ @kbd{ash -c 'func() @{ echo $a;@}; a=1 func; echo $a'} @result{}1 @result{} -$ @kbd{bash -c 'set -o posix; func()@{ echo $a;@}; a=1 func; echo $a'} +$ @kbd{bash -c 'set -o posix; func() @{ echo $a;@}; a=1 func; echo $a'} @result{}1 @result{}1 @end example -- 1.7.2
