9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: "Ciprian Dorin, Craciun" <ciprian.craciun@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] rc shell UNIX port repository
Date: Mon, 14 Dec 2009 17:15:40 +0200	[thread overview]
Message-ID: <8e04b5820912140715g20e56d31m57bd7e567843d0e4@mail.gmail.com> (raw)
In-Reply-To: <0d3820e90fedfa15c374652fe64f06b4@ladd.quanstro.net>

On Mon, Dec 14, 2009 at 4:08 PM, erik quanstrom <quanstro@quanstro.net> wrote:
>>     Unfortunately after playing a little bit more with rc, and trying
>> it's syntax and semantics to the limit, I've also found other nasty
>> bugs (some of which I've fixed, other I was not able to do so)...
>
> what nasty bugs?  could you give some specifics.

    One for example (I think it is a bug, but maybe in the semantics
you've described it's not):
    * again if we're using `-e`, and inside a function we write `fn
dosomething { echo 1 ; false ; echo 2 ; return 0 ; }`
    * if we run `dosomething` it shall output only `1`, as the false
breaks the execution;
    * but if we run `dosomething || echo 3`, we see `1 2` outputed,
because the false is not exiting the shell as the invocation of the
function is part of a `||` statement;

    But undoubtedly, the following is a bug (I have an array and want
to display all the elements on a single line, wrapped inside quotes,
and everything with a prefix and a suffix):

~~~~
application__erl_files__short=(
                a.erl
                b.erl
                c.erl
)

application__erl_files__long=(
                /home/ciprian/workbench/vel/a.erl
                /home/ciprian/workbench/vel/b.erl
                /home/ciprian/workbench/vel/c.erl
)

ifs='\n' echo '  erl files = ('^`{ echo -n
'`'^$application__erl_files__short^'`' }^')'
ifs='\n' echo '  erl files = ('^`{ echo -n
'`'^$application__erl_files__long^'`' }^')'
~~~~
    it displays:
~~~~
  erl files = (`a.erl` `b.erl` `c.erl`)
  erl files = (`/home/cipria)   erl files = (/workbe)   erl files =
(ch/vel/a.erl` `/home/cipria)   erl files = (/workbe)   erl files =
(ch/vel/b.erl` `/home/cipria)   erl files = (/workbe)   erl files =
(ch/vel/c.erl`)
~~~~

    See the second line of the output. It's wrong. I think there is a
buffer overrun problem...


>>     By the way, what is the expected outcome of the following snippet
>> of code when the `-e` (exit on non-0 exit code) is on:
>>
>> { echo 1 ; false ; echo 2 } || echo 3
>>
>>     Case a) it should print `1` and exit because the false in the
>> middle of the block just failed;
>>     Case b) it should print `1`, and then `2`, because `false` is
>> inside a block that is part of a `||` command;
>>     Case c) it should print `1`, and then `3`, because `false` has
>> stopped the evaluation of the block, and made the entire block exit
>> code be `1`.
>
> that's not a bug.  -e is only evaluated at the end of a full rc
> production.  in yiour case, there is only one production and
> it $status is '' (true) at the end of it.  since echo 3 sets status
> to true.
>
> - erik

    Even though I understand your reasoning, I see `-e` more as a
"accept no errors from commands, and treat any non-0-exit code as an
unhandled exception, except :) if its part of an if, &&, or ||
construct". (I see it as an equivalent for try-throw-except...)

    Ciprian.



  reply	other threads:[~2009-12-14 15:15 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <<8e04b5820912140211nd4edf3ei851c5a5128438d96@mail.gmail.com>
2009-12-14 14:08 ` erik quanstrom
2009-12-14 15:15   ` Ciprian Dorin, Craciun [this message]
2009-12-14 16:14     ` erik quanstrom
2009-12-14 16:33       ` Ciprian Dorin, Craciun
2009-12-14 16:44         ` erik quanstrom
     [not found] <<0d3820e90fedfa15c374652fe64f06b4@ladd.quanstro.net>
2009-12-14 14:14 ` erik quanstrom
     [not found] <<8e04b5820912052352w304556cdufac28cc2dd3f9ffe@mail.gmail.com>
2009-12-06 15:24 ` erik quanstrom
2009-12-06  7:52 Ciprian Dorin, Craciun
2009-12-06 11:36 ` Charles Forsyth
2009-12-06 12:58   ` Ciprian Dorin, Craciun
2009-12-06 13:37     ` Frederik Caulier
2009-12-06 13:37     ` Charles Forsyth
2009-12-06 18:38 ` Axel Belinfante
2009-12-14  9:49 ` weakish
2009-12-14 10:11   ` Ciprian Dorin, Craciun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8e04b5820912140715g20e56d31m57bd7e567843d0e4@mail.gmail.com \
    --to=ciprian.craciun@gmail.com \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).