[tex-live] how robustly call awk script?

Hartmut Henkel hartmut_henkel at gmx.de
Sun Jan 14 19:15:44 CET 2007


Hi Sanjoy,

On Sun, 14 Jan 2007, Sanjoy Mahajan wrote:

> > It means that env took the "-f" option which you want to pass to awk.
>
> Right.  I straced x.sh which is a simple script to total the numbers
> on stdin (I use it to unbalance my checkbook):
>
> #!/usr/bin/env awk -f
> BEGIN {total=0};
> {total += $1}
> END {print total}
>
> and it had these lines as it tried to find awk on the path:
>
> ...
> execve("/usr/bin/awk -f", ["awk -f", "./x.sh"], [/* 36 vars */]) = -1
> ENOENT (No such file or directory)
>
> So env stupidly combines the -f with the program name, making argv[0]
> = "awk -f", and searches for a binary named "/usr/bin/awk -f" (!)
> which will never be found.
>
> Without the -f, i.e. "#! /usr/bin/env awk", it won't work at all
> because awk thinks the rest of the file are lines to be processed,
> rather than pattern text.  So I think your solution

no, Nelson's :-)

> is the only portable one.

ah, thanks a lot for investigation, so let's be happy that at least perl
does not need a -f :-)

Regards, Hartmut

BTW, i tried a few more, but i didn't get a single application of awk
running together with env, neither in -f nor in '...' mode, if it's in
an executable file. No problem on the command line however. If anybody
has an example... :-)



More information about the tex-live mailing list