This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: igawk problem


On Sat, 14 Aug 2004, Hans Horn wrote:

> Igor,
> 
> thx for your good idea to look what igawk is doing under the hood.
> So I tracked things further down and found that the problem is one line 
> further down than you thought, and does not seem to be cygwin/windows 
> specific (doesn't work under AIX either):
> 
> The real bad guy is:
> eval gawk $opts -- '"$processed_program"' '"$@"'

Hans,

I meant that the long line that's passed to gawk was constructed at the 
line that I named as culprit.  That long line should not be passed on the 
command line.

Try changing the commands in lines 129-133 to something like

tmpname=`mktemp`
gawk -- "$expand_prog" /dev/stdin <<EOF >$tmpname
$program
EOF
eval gawk $opts -- -f $tmpname '"$@"' \
  && rm -f $tmpname

Or

gawk -- "$expand_prog" /dev/stdin <<EOF | eval xargs -0i gawk $opts -- {} '"$@"'
$program
EOF

Or even

gawk -- "$expand_prog" /dev/stdin <<EOF | eval gawk $opts -- -f- '"$@"'
$program
EOF

though the last will probably not work well when the input also comes on 
stdin...
HTH,
	Igor

> The following workaround works under cygwin :
> 
> ###############
> tmpname=`mktemp`
> echo "$processed_program" > $tmpname
> gawk -f $tmpname
> if [ $? -eq 0 ]; then rm -f $tmpname; fi
> #################
> 
> Interestingly, this doesn't work under AIX.
> There, the command
>     echo "$processed_program" > $tmpname
> replaces all "\n" in the code (that may occur in printf statements), with 
> explicit newlines.
> 
> Unfortunately, I don't really understand fully what the construct
>     eval gawk $opts -- '"$processed_program"' '"$@"'
> other than passing '"$processed_program"' to gawk.
> 
> If you can offer any further isight, I'd be very appreciative!
> 
> cheers,
> Hans
> 
> Igor Pechtchanski wrote:
> > On Fri, 13 Aug 2004, Hans Horn wrote:
> >
> >>  Group,
> >>
> >> I have a rather lengthy awk script (that internally includes a bunch
> >> of awk library functions; therefore I'm using igawk).
> >>
> >> When I invoke it, e.g. like
> >>
> >> echo | igawk -f script.awk
> >> eval: gawk: argument list too long
> >>
> >> The script and the awk library functions together make up approx.
> >> 34kByte.
> >>
> >> Does anybody have a clue whether I'm running here into a hard shell
> >> limit, or some internal limit of gawk?
> >
> > This looks like an upstream igawk portability bug -- the lines
> >
> > processed_program=`gawk -- "$expand_prog" /dev/stdin <<EOF
> > $program
> > EOF
> >
> > look like the culprit.  They should be using xargs instead...
> > This is a Win32 limit, and it has to do with the fact that gawk is
> > invoked using Win32 calls by default.  There are a few solutions, one
> > of the easiest being to "mount -X" your /bin and /usr/bin
> > directories.  Or, you can fix igawk to use xargs and submit your
> > patch upstream... ;-)
> > Igor 

-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Happiness lies in being privileged to work hard for long hours in doing
whatever you think is worth doing."  -- Dr. Jubal Harshaw

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]