From owner-freebsd-ports@FreeBSD.ORG Wed Jun 15 02:37:32 2005 Return-Path: X-Original-To: freebsd-ports@FreeBSD.org Delivered-To: freebsd-ports@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1FD6C16A41C; Wed, 15 Jun 2005 02:37:32 +0000 (GMT) (envelope-from gad@FreeBSD.org) Received: from smtp2.server.rpi.edu (smtp2.server.rpi.edu [128.113.2.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id CD97A43D1F; Wed, 15 Jun 2005 02:37:31 +0000 (GMT) (envelope-from gad@FreeBSD.org) Received: from [128.113.24.47] (gilead.netel.rpi.edu [128.113.24.47]) by smtp2.server.rpi.edu (8.13.0/8.13.0) with ESMTP id j5F2bTeB010545; Tue, 14 Jun 2005 22:37:30 -0400 Mime-Version: 1.0 Message-Id: In-Reply-To: References: Date: Tue, 14 Jun 2005 22:37:28 -0400 To: freebsd-arch@FreeBSD.org, freebsd-ports@FreeBSD.org From: Garance A Drosehn Content-Type: text/plain; charset="us-ascii" ; format="flowed" X-CanItPRO-Stream: default X-RPI-SA-Score: undef - spam-scanning disabled X-Scanned-By: CanIt (www . canit . ca) on 128.113.2.2 Cc: Subject: Re: Changes to `env' command - Bug in #! processing... X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jun 2005 02:37:32 -0000 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