From owner-freebsd-arch@FreeBSD.ORG Fri Jun 10 19:37:50 2005 Return-Path: X-Original-To: freebsd-arch@FreeBSD.org Delivered-To: freebsd-arch@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8AF9416A41C; Fri, 10 Jun 2005 19:37:50 +0000 (GMT) (envelope-from gad@FreeBSD.org) Received: from smtp3.server.rpi.edu (smtp3.server.rpi.edu [128.113.2.3]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3898643D1F; Fri, 10 Jun 2005 19:37:50 +0000 (GMT) (envelope-from gad@FreeBSD.org) Received: from [128.113.24.47] (gilead.netel.rpi.edu [128.113.24.47]) by smtp3.server.rpi.edu (8.13.0/8.13.0) with ESMTP id j5AJblZJ011027; Fri, 10 Jun 2005 15:37:48 -0400 Mime-Version: 1.0 Message-Id: Date: Fri, 10 Jun 2005 15:37:46 -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.3 Cc: Roman Neuhauser , Kris Kennaway Subject: Changes to `arg' - Bug in #! processing & "pear broken..." X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2005 19:37:50 -0000 As most people are probably tired of hearing, I recently changed the way the kernel parses #!-lines in shell scripts. This solves some problems with scripts that only break on FreeBSD, but it also removed some nice flexibility that FreeBSD has supported for many years now. 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'. Right now all three are wrapped up in a single update, but then the options are somewhat tied together. I could split them apart for committing. 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 (and *that* parsing-change will *not* be MFC-ed!). 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. All of new options put together will just about double the size of `env' on my system: i386: root wheel 4184 Jun 10 01:08 /usr/bin/env* root wheel 7360 Jun 10 14:31 /usr/bin/env-rel6* ppc: root wheel 8948 Jun 6 01:58 /usr/bin/env* root wheel 11912 Jun 10 14:28 /usr/bin/env-rel6* sparc: root wheel 6040 Jun 10 14:51 /usr/bin/env* root wheel 10008 Jun 10 14:52 /usr/bin/env-rel6* It does compile with WARNS=6 on the above three platforms, but then it did that before I started. 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 It has only had some light testing, so I'm sure there's at least a few bugs in there somewhere. I have not made any changes to the man page yet, but the comments should give you a good idea of how I *mean* for it to work. So, is this overkill? I think these features would be useful... -- Garance Alistair Drosehn = gad@gilead.netel.rpi.edu Senior Systems Programmer or gad@FreeBSD.org Rensselaer Polytechnic Institute; Troy, NY; USA