Date: Tue, 14 Jun 2005 22:37:28 -0400 From: Garance A Drosehn <gad@FreeBSD.org> To: freebsd-arch@FreeBSD.org, freebsd-ports@FreeBSD.org Subject: Re: Changes to `env' command - Bug in #! processing... Message-ID: <p0621020bbed541557725@[128.113.24.47]> In-Reply-To: <p06210269becf922e6622@[128.113.24.47]> References: <p06210269becf922e6622@[128.113.24.47]>
next in thread | previous in thread | raw e-mail | index | archive | help
Amusingly enough, I had originally posted this as "Changes to the `arg'
command". That might be a very popular command, if implemented right.
Anyway, an update on proposed changes to `env':
At 3:37 PM -0400 6/10/05, Garance A Drosehn wrote:
>As most people are probably tired of hearing, I recently changed
>the way the kernel parses #!-lines in shell scripts.
>
>I now propose to re-implement that flexibility (and more!) via some
>changes to the `env' command. The changes add three new (non-standard)
>options to `env'.
>
>I'd like to commit these changes to 6.0, and they should also be fine
>to MFC to 5.x. They do not depend on the change in kernel-parsing
>
>The three new options are:
> -v -- Turns up a verbosity setting, useful for seeing
> what `env' is doing. Particularly useful for
> debugging the following options.
> -S string -- "split string on spaces". The idea is to take
> a single string, split it into separate arguments,
> and then process those arguments. This supports
> single-quoted strings, double-quoted strings, and
> a few other features that the previous parsing
> code was never going to support.
> -P altpath -- specify a path list to use when searching for the
> 'utility' (program to execute). `env' does the
> search itself, without checking or changing the
> present value of PATH. This was implemented by
> copying a few routines from the `which' command.
>
>Note that due to the parsing-change in 6.0, the -P option is
>pretty much worthless for scripts in 6.0 without the -S option.
>
>These options would then let you have a script start with:
>
> #!/usr/bin/env -S /usr/local/bin/php -n -q -dsafe_mode=0
>
>which would work exactly the way that:
>
> #!/usr/local/bin/php -n -q -dsafe_mode=0
>
>does in 5.x-stable. They would also let you have a script which
>starts with:
>
> #!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl
>
>and the script will execute /usr/local/bin/perl or /usr/bin/perl,
>without caring about the present setting for PATH=, and without
>changing what value the script will see for PATH= when it executes.
I have worked on it some more, and the -S processing now also
supports ${SOMEVAR} references. The ${}-format is required, and
all it supports is environment variables. This gives users even
more flexibility that they did not have with the previous kernel-
parsing of options.
I also wrote up some regression tests for all these changes. Right
now I have 27 tests, but I intend to have several more by the time
I'm ready to commit it.
>The actual update is presently over 300 lines, so I'll just
>include a pointer to it:
>http://people.freebsd.org/~gad/env-rel6.diff
The update is now 486 lines, and has moved to:
http://people.freebsd.org/~gad/env/env-rel6.diff
The resulting source file is also available at:
http://people.freebsd.org/~gad/env/env.c
Scream now, or, well, scream later...
--
Garance Alistair Drosehn = gad@gilead.netel.rpi.edu
Senior Systems Programmer or gad@FreeBSD.org
Rensselaer Polytechnic Institute; Troy, NY; USA
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p0621020bbed541557725>
