From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2247 invoked from network); 11 Dec 1998 08:06:49 -0000 Received: from math.gatech.edu (list@130.207.146.50) by ns1.primenet.com.au with SMTP; 11 Dec 1998 08:06:49 -0000 Received: (from list@localhost) by math.gatech.edu (8.9.1/8.9.1) id DAA01293; Fri, 11 Dec 1998 03:02:00 -0500 (EST) Resent-Date: Fri, 11 Dec 1998 03:01:56 -0500 (EST) Message-ID: <19981211080558.46630@athenaeum.demon.co.uk> Date: Fri, 11 Dec 1998 08:05:58 +0000 From: Phil Pennock To: zsh-users@math.gatech.edu Subject: Re: Redirecting variable fds Mail-Followup-To: zsh-users@math.gatech.edu References: <19981210215235.59487@athenaeum.demon.co.uk> <5laf0vpqfh.fsf@tequila.cs.yale.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.89.1 In-Reply-To: <5laf0vpqfh.fsf@tequila.cs.yale.edu>; from "Stefan Monnier" on Thu 10 Dec 1998 (17:45 -0500) Organisation: Organisation? Here? No, over there ----> X-Disclaimer: Any views expressed in this message, where not explicitly attributed otherwise, are mine and mine alone. Such views do not necessarily coincide with those of any organisation or company with which I am or have been affiliated. X-Phase-of-Moon: The Moon is Waning Crescent (45% of Full) Resent-Message-ID: <"7FNn73.0.kJ.q5DSs"@math> Resent-From: zsh-users@math.gatech.edu X-Mailing-List: archive/latest/1982 X-Loop: zsh-users@math.gatech.edu X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu I may have stumbled across a bug. I think the zsh-developers list might be getting sick of my bug reports. Typing away merrily, Stefan Monnier produced the immortal words: > The parsing is done before the parameter expansion so you're screwed. > But there's a workaround, using eval: function bar { > DEBUGMEM_INFOFD=$1 LD_PRELOAD=./bar.so eval $argv[3,-1] "$1>$2" } > It's not quite correct in that the content of $argv[3,-1] should be escaped > to prevent its evaluation ( la "$@"), but my zsh expertise is lacking here. Ah, thanks. By the "$@" bit, it looks as though you're trying for "${(@)argv[3,-1}" which doesn't on its own stop globbing. I've handled that by changing the 'eval ' for 'eval noglob '. So now quoted args behave as expected and unquoted ones are expanded at function-call time. The problem is that DEBUGMEM_INFO and LD_PRELOAD don't actually make it into the environment. Using 'env' as the command passed through, I can see quite plainly that they aren't there. But using env to place the values into the environment works: function bar { eval noglob env DEBUGMEM_INFOFD=$1 LD_PRELOAD=./bar.so "${(@)argv[3,-1]} "$1>$2" } Trying this: % FOO=x eval sh -c 'echo $FOO' and then without the eval, it seems the eval loses the auto-export functionality, in both 3.0.5 and 3.1.5. It doesn't appear to be documented though. Bug? -- --> Phil Pennock ; GAT d- s+:+ a22 C++(++++) UL++++/I+++/S+++/H+ P++@ L+++ E-@ W(+) N>++ o !K w--- O>+ M V !PS PE Y+ PGP+ t-- 5++ X+ R !tv b++>+++ DI+ D+ G+ e+ h* r y?