> > Maybe I can help?
>
> I come up for air maybe twice a day? You're not here? The coordination 
> overhead
> would swamp any possible productivity gain unless I could partition the task,
> and then there's the "you could have written your own shell a year ago, why 
> are
> you asking me now" issue?

Ah, I am sorry.

> > My experience with bc's parser (and others) might help with
> > parsing and tokenizing.
>
> It's not how to parse, it's _what_ to parse. Making the code do what I want is
> easy, figuring out exactly what it should do is what's taking all the time. 
> For
> example,last night I figured out that "{x}</dev/null echo $x" never producing
> output is a sequencing issue, and
>
>   $ if echo x1=$x; then echo x2=$x; fi {x}</dev/null
>   x1=10
>   x2=10
>
> works fine. (And leaks filehandles! The way to close it is "exec 10<&-")
>
> Also, { echo hello;}|cat needs both the space and the semicolon but (echo
> hello)|cat doesn't, but _other_ than acting as a control character for
> tokenizing, ) acts from a flow control perspective as a normal command
> (specifically a flow control termination from an "(echo)echo" is an error but
> "(echo)<<<abc" is not only ok, but applies retroactively to the start of the
> statement, ala:
>
> if echo hello
> then
>   echo walrus
> fi | tee potato.txt
>
> _both_ statements wind up in the file...
>
> Oh, and the annoying part (in one of the twitter threads) is ";>&" and ";&>"
> parse differently (the first is ";" ">&" and works after echo, the other is 
> ";&"
> ">" and an error after echo), so you MUST consume specifically recognized 
> groups
> from the front when breaking it into words.
>
> Oh, and "echo 2>/dev/null" produces no output but "echo 2|cat" produces 
> output,
> and the reason is _not_ the first glance one, it has to do with tokenizing.
> ("echo" "2>" "/dev/null" so echo gets called with no arguments, vs "echo" "2"
> "|" "cat" so "echo 2" says 2\n which is then NOP washed through cat).
>
> I've been flinging around shell script forever and I didn't know these things
> because I just put spaces when it was ambiguous. Now I _need_ to know to run
> other people's existing scripts, and there are SO many corner cases and 
> they're
> mostly historical accumulations with no obvious pattern behind most of them. 
> And
> no, posix isn't very helpful about tokenizing ";&" or "3<>" or ">|"...
>
> And yes, "{x}<abc" parses as "{x}<" "abc", but:
>
>   $ echo {abc
>   {abc
>   $ echo {abc</dev/null
>   {abc
>
> because of course.
>
> I cut and paste these things to a big text file I need to turn into a much, 
> much
> longer tests/sh.test. My _code_ may not be getting longer fast, but that file 
> is...
>
> Rob
> _______________________________________________
> Toybox mailing list
> Toybox@lists.landley.net
> http://lists.landley.net/listinfo.cgi/toybox-landley.net

I see. I apologize for bothering you.

Gavin Howard
_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to