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>