Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Mar 2007 16:54:43 +0300
From:      Yar Tikhiy <yar@comp.chem.msu.su>
To:        Doug Barton <dougb@FreeBSD.org>
Cc:        freebsd-rc@FreeBSD.org
Subject:   Re: cvs commit: doc/en_US.ISO8859-1/articles/rc-scripting article.sgml
Message-ID:  <20070304135443.GK40430@comp.chem.msu.su>
In-Reply-To: <20070304130408.GJ40430@comp.chem.msu.su>
References:  <200703031011.l23ABYhb039755@repoman.freebsd.org> <45EA68AF.6000700@FreeBSD.org> <20070304130408.GJ40430@comp.chem.msu.su>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 04, 2007 at 04:04:08PM +0300, Yar Tikhiy wrote:
> On Sat, Mar 03, 2007 at 10:35:27PM -0800, Doug Barton wrote:
> > Yar Tikhiy wrote:
> > >yar         2007-03-03 10:11:34 UTC
> > >
> > >  FreeBSD doc repository
> > >
> > >  Modified files:
> > >    en_US.ISO8859-1/articles/rc-scripting article.sgml 
> > >  Log:
> > >  Explain how an rc.d script can use extra command-line arguments.
> > >  
> > >  Revision  Changes    Path
> > >  1.9       +138 -0    
> > >  doc/en_US.ISO8859-1/articles/rc-scripting/article.sgml
> > >
> > >http://www.FreeBSD.org/cgi/cvsweb.cgi/doc/en_US.ISO8859-1/articles/rc-scripting/article.sgml.diff?&r1=1.8&r2=1.9&f=h
> > 
> > Yar,
> > 
> > This good stuff, thanks! I have one quibble with the last paragraph. 
> > The shift in rc.subr isn't "apparent" as you phrase it, it's literal:
> 
> Yeah, I tried to hide a thing from the reader which he should already
> have known: the shift command. :-)
> 
> > run_rc_command()
> > {
> >     ...
> >     # Don't repeat the first argument when passing additional command-
> >     # line arguments to the command subroutines.
> >     #
> >     shift 1
> >     rc_extra_args="$*"
> 
> Oh my...  Now I see why existing rc.d scripts use this bogus command:
> 
> 	run_rc_command "$*"
> 
> It's because rc.subr will mess up the arguments anyway.  Perhaps
> we should investigate if "$@" can be used consistently to preserve
> original boundaries between arguments to an rc.d script...  Now we
> have little chance there as the final command is eval, which is the
> ultimate killer of the original boundaries.  I'm uncertain if the
> eval is really necessary to invoke rc.d methods.

I failed to take into account initially that $foo_cmd can be a
random shell expression, not only a function name.  That's why we
need the final eval.

OTOH, letting extra arguments is usually wrong if $foo_cmd isn't a
function name.  E.g., let's consider the following bones of a script:

	name=foo
	start_cmd="echo Hello world; exit 0"
	run_rc_command "$@"

If we issue ``foo start 1 2 3'', the ultimate shell command executed
will be ``echo Hello world; exit 0 1 2 3'', which is bogus...

Nevertheless we seem to be doomed to mishandle rc.d arguments with
embedded whitespace.  Sigh.

-- 
Yar



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070304135443.GK40430>