On 25/04/18 20:19, Kaz Kylheku (Coreutils) wrote:
> On 2018-04-24 22:09, Pádraig Brady wrote:
>> I was thinking that the explanation of -S in usage() would say 
>> something like:
>>
>>   -S, --split-string=S  process and split S into separate arguments
>>                           used to pass multiple arguments on shebang 
>> lines
> 
> One little problem with this FreeBSD design is that in spite of
> supporting variable substitution, it lacks the flexibility of
> specifying where among those arguments the script name is inserted!
> 
> Say we have a "#!/usr/bin/env -S lang ..." script called "foo.lang".
> 
> Suppose we want it so that "lang -f foo.lang -x" is invoked, where
> -f is the option to the lang interpreter telling it to read the
> script file foo.lang, and -x is an option to the foo.lang script
> itself.
> 
> It would be useful if the -S mechanism could indicate this insertion
> of foo.lang into the middle of the arguments.
> 
> The variable expansion mechanism could do it. Suppose that a certain
> reserved variable name like ${ENV_COMMAND} (not my actual suggestion)
> expands to the name of the last argument received by env.
> 
> Furthermore, when env is asked to expands this variable one or more
> times, it makes a note of this and then sets a flag which suppresses
> the script name from appearing in its usual position at the end.
> 
> Then this is possible:
> 
>      #!/usr/bin/env -S lang -f ${ENV_COMMAND} -x

This is a very good point. Thanks for bringing it up.
If we're taking the time to do this, we should make it generally usable.
This would be useful with for example:

  #!/usr/bin/env -S awk -f

Now that does work if awk would ignore any options after -f ...,
but it only ignores options it doesn't recognise :/,
so if you wanted to pass -f to the awk script for example you'd need this 
support.
Note one could hack it using ${_} which is generally set to the last arg, i.e.

  #!/usr/bin/env -S awk -F: -f ${_} --
  But then the awk script would need to ignore the first argument which is 
messy,
  and also ${_} may not be set in all contexts.

I suppose we could support the bash/ksh syntax of ${@:-1}
and once that variable is referenced it's not passed on.

cheers,
Pádraig

Reply via email to