exit! affects stdout redirection to a file

Discussion in 'Ruby' started by Gennady, Jun 28, 2003.

  1. Gennady

    Gennady Guest

    This is a multi-part message in MIME format.

    ------=_NextPart_000_0007_01C33CCA.E6B22200
    Content-Type: text/plain;
    charset="koi8-r"
    Content-Transfer-Encoding: quoted-printable

    Is there an explanation for the following behaviour:

    ruby -e "puts 'abcd'" > aaa
    file aaa will contain 'abcd'

    However if you run

    ruby -e "puts 'abcd';exit!" > aaa
    file aaa will be empty.

    At the same time:

    ruby -e "puts 'abcd';exit!"=20
    will display 'abcd' on the screen.

    Somehow, exit! do not only execute at_exit handler and bypasses =
    finalizers, but also do not flush the last puts if stdout is redirected. =
    Very strange.

    [x86.bison:9]gfb> ruby -v
    ruby 1.6.8 (2002-12-24) [i386-solaris2.8]

    Thank you,
    Gennady.

    P.S. Same behaviour on Linux
    [lnx.bear:54]bystr> ruby -v
    ruby 1.6.8 (2002-12-24) [i686-linux]

    ------=_NextPart_000_0007_01C33CCA.E6B22200
    Content-Type: text/html;
    charset="koi8-r"
    Content-Transfer-Encoding: quoted-printable

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">
    <META content=3D"MSHTML 6.00.2800.1170" name=3DGENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=3D#ffffff>
    <DIV><FONT face=3DArial size=3D2>Is there an explanation for the =
    following=20
    behaviour:</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>ruby -e "puts 'abcd'" &gt; =
    aaa</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2>file aaa will =
    contain&nbsp;'abcd'</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>However if you run</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>ruby -e "puts 'abcd';exit!" &gt; =
    aaa</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2>file aaa will be empty.</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>At the same time:</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>ruby -e "puts 'abcd';exit!" =
    </FONT></DIV>
    <DIV><FONT face=3DArial size=3D2>will display 'abcd' on the =
    screen.</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>Somehow, exit! do not only execute =
    at_exit handler=20
    and bypasses finalizers, but also do not flush the last puts if stdout =
    is=20
    redirected. Very strange.</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>[x86.bison:9]gfb&gt; ruby -v<BR>ruby =
    1.6.8=20
    (2002-12-24) [i386-solaris2.8]</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>Thank you,</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2>Gennady.</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>P.S. Same behaviour on =
    Linux</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2>[lnx.bear:54]bystr&gt; ruby -v<BR>ruby =
    1.6.8=20
    (2002-12-24) [i686-linux]</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV></BODY></HTML>

    ------=_NextPart_000_0007_01C33CCA.E6B22200--
     
    Gennady, Jun 28, 2003
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.