On 04/28/2018 12:58 AM, Assaf Gordon wrote: > Hello Eric, Bernhard, > > Thank you for commenting, you raise many good point. > Below are some ideas regarding them (combining replies to the last 4 emails). > > On Fri, Apr 27, 2018 at 12:31 AM, Bernhard Voelker <m...@bernhard-voelker.de> > wrote: >> One nit: env -v shows a confusing error diagnostic when it is >> separated from the -S option on the shebang line: >> >> $ cat xxx >> #!src/env -v -S cat -n >> hello >> >> $ ./xxx >> src/env: invalid option -- ' ' >> Try 'src/env --help' for more information. > > Agree, very confusing and unhelpful message. > > For comparison, FreeBSD behaves the same: > > $ cat xxx > #!/usr/bin/env -v -S cat -n > hello > $ ./xxx > env: illegal option -- > usage: env [-iv] [-P utilpath] [-S string] [-u name] > [name=value ...] [utility [argument ...]] > > > But of course we can and should do better. > > > On Fri, Apr 27, 2018 at 7:13 AM, Eric Blake <ebl...@redhat.com> wrote: >> We could include ' ' (and maybe '\t') as part of the short-option >> optstring accepted in getopt_long(), as an undocumented silent no-op. > > On Fri, Apr 27, 2018 at 8:22 AM, Eric Blake <ebl...@redhat.com> wrote: >> I tested it, and it DOES seem to work: > [...] >> switch (optc) >> { >> + case ' ': >> + case '\t': >> + case '-': >> + /* Undocumented no-ops, to allow '-v -S' to behave like '-vS' */ >> + break; > > Good solution, thanks for testing it. > > > I wonder - would it be better to detect this issue > and report an informative error message instead of silently accepting it? > > If GNU env accepts it, we create yet another (very subtle) difference > between FreeBSD and GNU. > If we reject it and explain why, we create a better user experience, > but also promote portable scripting...
Good point. After some playing with it, I also think it's better to err with a nice diagnostic. But even that isn't that easy. Although ignoring ' ', '\t', and '-' is a nice solution, it seems to get more ugly to handle other cases. > On Fri, Apr 27, 2018 at 12:57 PM, Eric Blake <ebl...@redhat.com> wrote: >> This is missing support for -P, which is one of the essential features >> of FreeBSD env, per their man page: > > I can certainly add support "-P" (I'll do it in a separate patch though). > > Is "-P" (alternate path) something that is often requested? > I do see a lot of questions about passing multiple arguments with > "#!/usr/bin/env", > but I haven't noticed people asking about setting per-script non-standard > $PATH > (but without changing the actual $PATH). Isn't this the regular case with specifying the PATH variable? env PATH=/some:/path prg Have a nice day, Berny