cvs commit: doc/en_US.ISO8859-1/articles/rc-scripting
article.sgml
Yar Tikhiy
yar at comp.chem.msu.su
Mon Mar 5 19:31:29 UTC 2007
On Sun, Mar 04, 2007 at 02:52:49PM -0800, Doug Barton wrote:
> 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. :-)
>
> Again, looking at it from the point of view of a naive reader, there
> is a difference between "I know that the shift command exists, and
> sort of know what it does" and "I know how the shift command is used
> by rc.subr to affect the command line arguments to my script." Your
> article is (to some extent) about teaching the latter, so I think it's
> reasonable to spend some time spoon feeding the reader until they are
> ready for some meat.
Agreed! The new revision tries to do that better.
> >>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.
>
> I think it's more likely that someone would use $* vs. $@ out of force
> of habit. :)
It's a bad habit IMHO unless one really means $* :-)
> >Perhaps
> >we should investigate if "$@" can be used consistently to preserve
> >original boundaries between arguments to an rc.d script...
>
> I wouldn't object to some testing on that. I'll change my local copy
> and see how it behaves.
I took a look at that and found that, as long as we support for
random shell expressions in $foo_cmd, the magic wand of "$@" cannot
help us without some additional black magic. If $foo_cmd were
guaranteed to be merely the name of a function or simple command,
then we would need no final eval to execute $foo_cmd. But stuffing
shell expressions in $foo_cmd is neat and should be supported.
Perhaps we should just tell people that they cannot pass hairy
arguments to rc.d scripts -- each argument must be a simple word.
--
Yar
More information about the freebsd-rc
mailing list