From 5e516898d73dd797248082daefeb4147ae20fec4 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 1 Oct 2014 20:36:55 +0100 Subject: 33312: document redirections applied to function definitions --- ChangeLog | 5 +++++ Doc/Zsh/builtins.yo | 14 ++++++++++++++ Doc/Zsh/grammar.yo | 9 +++++++++ 3 files changed, 28 insertions(+) diff --git a/ChangeLog b/ChangeLog index 439fd77e6..c68bd1250 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-10-01 Peter Stephenson + + * 33312: Doc/Zsh/builtins.yo, Doc/Zsh/grammar.yo: document + redirections applied to function definitions. + 2014-09-30 Barton E. Schaefer * 33298: Src/lex.c: make lexrestore() more signal-safe diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo index 9862c637e..41c189fe2 100644 --- a/Doc/Zsh/builtins.yo +++ b/Doc/Zsh/builtins.yo @@ -2174,6 +2174,20 @@ match one of these patterns will be written. If no var(name) is given, the definitions of all functions currently defined or marked as autoloaded will be written. +Note the second form cannot be used for compiling functions that +include redirections as part of the definition rather than within +the body of the function; for example + +example(fn1() { { ... } >~/logfile }) + +can be compiled but + +example(fn1() { ... } >~/logfile) + +cannot. It is possible to use the first form of tt(zcompile) to compile +autoloadable functions that include the full function definition instead +of just the body of the function. + The third form, with the tt(-t) option, examines an existing compiled file. Without further arguments, the names of the original files compiled into it are listed. The first line of output shows diff --git a/Doc/Zsh/grammar.yo b/Doc/Zsh/grammar.yo index 77f0098e3..eb1edf7f8 100644 --- a/Doc/Zsh/grammar.yo +++ b/Doc/Zsh/grammar.yo @@ -352,6 +352,15 @@ If the option tt(SH_GLOB) is set for compatibility with other shells, then whitespace may appear between between the left and right parentheses when there is a single var(word); otherwise, the parentheses will be treated as forming a globbing pattern in that case. + +In any of the forms above, a redirection may appear outside the +function body, for example + +example(func() { ... } 2>&1) + +The redirection is stored with the function and applied whenever the +function is executed. Any variables in the redirection are expanded +at the point the function is executed, but outside the function scope. ) cindex(timing) findex(time) -- cgit 1.4.1