i think 'rfork e' in lc will fix this; i'm not sure if it breaks anything
else.
i can't tell if this was an oversight or done on purpose. lc itself doesn't
seem all that useful or necessary.

On Wed, Oct 18, 2017 at 12:48 PM Giacomo Tesio <[email protected]> wrote:

> Pretty clear, thanks! :-)
>
> So, to "fix" this rc would need an option to know to rfork(RFENVG)
> before doing anything else.
> Something like:
>
>    -f [nNeEsfFm]   Start as a new process group using rfork(flags)
>
> This way lc would produce not surprises by simply adding "-f e" to the
> first line.
>
> It shouldn't be an hard fix, but I wonder if it's actually worth the
> effort.
>
>
> Also, probably -f is not the best flag here as it usually mean "file"...
> -r would be a better choice, but it's taken for debugging output.
> I might use -d for debugging output since -d is a no-op (why?) and -r
> for this early rfork, but I have no idea of what it would broke.
>
>
>
> Giacomo
>
>
> 2017-10-18 19:25 GMT+02:00 Skip Tavakkolian <[email protected]>:
> > yes. lc -- an rc script -- shares the environment with the rc that starts
> > it; so env is updated with arglist of lc. $* is the arglist that parent
> > (interactive) rc was started with. rc(1) says:
> >
> >         $*       Set to rc's argument list during initialization.
> >                    Whenever a . command or a function is executed, the
> >                    current value is saved and $* receives the new
> >                    argument list.  The saved value is restored on com-
> >                    pletion of the . or function.
> >
> > if lc was a function, there would be no surprises:
> >
> > % cat /bin/lc
> > #!/bin/rc
> > ls -p $* | mc
> > % fn LC { ls -p $* | mc }
> > % echo $*
> >
> > % cat '/env/*'
> > % LC >/dev/null
> > % echo $*
> >
> > % cat '/env/*'
> > %
> >
> > On Wed, Oct 18, 2017 at 9:02 AM Antons Suspans <[email protected]> wrote:
> >>
> >> On Wed, Oct 18, 2017 at 05:31:28PM +0200, Giacomo Tesio wrote:
> >> > I have been a bit surprised to see that $* does not always contains
> >> > the same as '/env/*':
> >> >
> >> > % echo $*
> >> >
> >> > % cat '/env/*'
> >> > % lc
> >> > bin/ lib/ tmp/
> >> > % echo $*
> >> >
> >> > % cat '/env/*'
> >> > /bin/lc%
> >> >
> >> > Not really an issue, but why this happens?
> >>
> >> I guess...
> >>
> >> When starting a command from rc, execforkexec() does fork(), which
> >> is an equivalent of rfork(RFFDG|RFREND|RFPROC) and does not imply
> RFENVG.
> >>
> >> As lc(1) is a shell script, its shell instance sets /env/'*'.
> >>
> >> Hope this helps.
> >>
> >> --
> >> Antons
> >>
> >
>
>

Reply via email to