NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
bin/47608: ``var=value func-call'' does not export var in the function (+FIX)
>Number: 47608
>Category: bin
>Synopsis: ``var=value func-call'' does not export var in the function
>(+FIX)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: bin-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Mar 02 18:30:00 +0000 2013
>Originator: Robert Elz
>Release: NetBSD (current as of 2013-03-02 & all earlier supported
>versions)
>Organization:
Prince of Songkla University
>Environment:
System: NetBSD jade.coe.psu.ac.th 5.1_STABLE NetBSD 5.1_STABLE
(JADE-1.12-20120130) #27: Tue Jan 31 05:20:31 ICT 2012
kre%jade.coe.psu.ac.th@localhost:/usr/obj/5/kernels/i386/JADE i386
Architecture: i386
Machine: i386
>Description:
The syntax
var=value command
is supposed to add var (with value "value") to the environment
of command. If command is an executable, it does. If
command is a function, it doesn't - the function gets to see
the value of ${var} as being "value", but any commands it
runs do not.
>How-To-Repeat:
unset var
myfunc() { env | grep '^var=' ; echo "var was ${var} in myfunc"; }
var=foo myfunc
The output should be:
var=foo
var was foo in myfunc
But is instead:
var was foo in myfunc
The "env" invocation does not send a value for "var" to grep.
Note this is (kind of) related to the long discussion on
tech-userlevel on what should be the value in var after myfunc
finishes, but this one is much simpler, non-controversial,
and clearly a bug in our sh.
>Fix:
Apply the patch below. It is kind of trivial, but works...
--- eval.c.bug 2013-01-03 15:54:42.000000000 +0700
+++ eval.c 2013-03-03 01:00:48.000000000 +0700
@@ -947,7 +947,7 @@
}
savehandler = handler;
handler = &jmploc;
- listmklocal(varlist.list, 0);
+ listmklocal(varlist.list, VEXPORT);
/* stop shell blowing its stack */
if (++funcnest > 1000)
error("too many nested function calls");
Home |
Main Index |
Thread Index |
Old Index