Loading ...
Sorry, an error occurred while loading the content.

GNU's /bin/true

Expand Messages
  • Shlomi Fish
    Hi all. Inspired by the bit about the Solaris true here: http://thedailywtf.com/Articles/The-Comcast-Bill,-A-Buggy-Traffic-Light,-and-More.aspx I decided to
    Message 1 of 3 , Feb 23, 2008
    • 0 Attachment
      Hi all.

      Inspired by the bit about the Solaris true here:

      http://thedailywtf.com/Articles/The-Comcast-Bill,-A-Buggy-Traffic-Light,-and-More.aspx

      I decided to see how my GNU/Linux's /bin/true is all about. "less /bin/true"
      indicated it was a binary executable and had many symbols to show for
      (including many printf-formats). And:

      <<<<
      $ ls -l /bin/true
      -rwxr-xr-x 1 root root 23468 2008-01-29 13:21 /bin/true
      >>>>

      I wondered why it should be so large, given all it had to do was "return 0;",
      and so I did "man true":

      <<<<<<<<<<<<<<
      NAME
      true - do nothing, successfully

      SYNOPSIS
      true [ignored command line arguments]
      true OPTION

      DESCRIPTION
      Exit with a status code indicating success.

      --help display this help and exit

      --version
      output version information and exit

      NOTE: your shell may have its own version of true, which usually super‐
      sedes the version described here. Please refer to your shell's docu‐
      mentation for details about the options it supports.
      >>>>>>>>>>>>>

      I laughed quite a bit seeing it accepts some command-line arguments.

      Then I tried "true --help" and "true --version" which didn't print anything
      because they were the shell's built-in true command. So I did the same
      with "/bin/true --help" and "/bin/true --version":

      <<<<<<<<<<<<<<<<<<<
      shlomi:~$ /bin/true --help
      Usage: /bin/true [ignored command line arguments]
      or: /bin/true OPTION
      Exit with a status code indicating success.

      --help display this help and exit
      --version output version information and exit

      NOTE: your shell may have its own version of true, which usually supersedes
      the version described here. Please refer to your shell's documentation
      for details about the options it supports.

      Report bugs to <bug-coreutils@...>.
      shlomi:~$ /bin/true --version
      true (GNU coreutils) 6.10
      Copyright (C) 2008 Free Software Foundation, Inc.
      License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
      This is free software: you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.

      Written by Jim Meyering.
      shlomi:~$
      >>>>>>>>>>>>>>>>>>>>

      So now I no longer wonder why it is so bloated.

      What would we do without GNU?

      Regards,

      Shlomi Fish

      ---------------------------------------------------------------------
      Shlomi Fish shlomif@...
      Homepage: http://www.shlomifish.org/

      I'm not an actor - I just play one on T.V.
    • Amit Aronovitch
      ... Funny or not - it has to. Thats the GNU Coding Standards for you... http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces Sec. 4.7:
      Message 2 of 3 , Feb 23, 2008
      • 0 Attachment
        On Sat, Feb 23, 2008 at 10:51 AM, Shlomi Fish <shlomif@...> wrote:
        > Hi all.
        >
        > Inspired by the bit about the Solaris true here:
        >
        > http://thedailywtf.com/Articles/The-Comcast-Bill,-A-Buggy-Traffic-Light,-and-More.aspx
        >
        > I decided to see how my GNU/Linux's /bin/true is all about. "less /bin/true"
        > indicated it was a binary executable and had many symbols to show for
        > (including many printf-formats). And:
        >
        > <<<<
        > $ ls -l /bin/true
        > -rwxr-xr-x 1 root root 23468 2008-01-29 13:21 /bin/true
        > >>>>
        >
        > I wondered why it should be so large, given all it had to do was "return 0;",
        > and so I did "man true":
        >
        > <<<<<<<<<<<<<<
        > NAME
        > true - do nothing, successfully
        >
        > SYNOPSIS
        > true [ignored command line arguments]
        > true OPTION
        >
        > DESCRIPTION
        > Exit with a status code indicating success.
        >
        > --help display this help and exit
        >
        > --version
        > output version information and exit
        >
        > NOTE: your shell may have its own version of true, which usually super‐
        > sedes the version described here. Please refer to your shell's docu‐
        > mentation for details about the options it supports.
        > >>>>>>>>>>>>>
        >
        > I laughed quite a bit seeing it accepts some command-line arguments.
        >

        Funny or not - it has to. Thats the GNU Coding Standards for you...

        http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces

        Sec. 4.7: "... All programs should support two standard options:
        '--version' and '--help'. ..."
      • Michael Tewner
        Well - according to http://www.koders.com/c/fidDF83F838AA5D91F9B07D35DD6353BCA20BD2B48B.aspx /bin/true and /bin/false are the same program: /* Act like true
        Message 3 of 3 , Feb 23, 2008
        • 0 Attachment
          Well - according to
          http://www.koders.com/c/fidDF83F838AA5D91F9B07D35DD6353BCA20BD2B48B.aspx

          /bin/true and /bin/false are the same program:

          /* Act like "true" by default; false.c overrides this. */
          #ifndef EXIT_STATUS
          # define EXIT_STATUS EXIT_SUCCESS
          #endif

          #if EXIT_STATUS == EXIT_SUCCESS
          # define PROGRAM_NAME "true"
          #else
          # define PROGRAM_NAME "false"
          #endif


          False.c is simply:
          #define EXIT_STATUS EXIT_FAILURE
          #include "true.c"


          sure enough, they have the same size
          -rwxr-xr-x 1 root root 15736 2007-03-05 08:13 false
          -rwxr-xr-x 1 root root 15736 2007-03-05 08:13 true

          ... though they have a decent binary diff - due to 1-byte shifts on
          some segments - "true" being one character less than false.

          On Sat, Feb 23, 2008 at 3:51 AM, Shlomi Fish <shlomif@...> wrote:
          > Hi all.
          >
          > Inspired by the bit about the Solaris true here:
          >
          > http://thedailywtf.com/Articles/The-Comcast-Bill,-A-Buggy-Traffic-Light,-and-More.aspx
          >
          > I decided to see how my GNU/Linux's /bin/true is all about. "less /bin/true"
          > indicated it was a binary executable and had many symbols to show for
          > (including many printf-formats). And:
          >
          > <<<<
          > $ ls -l /bin/true
          > -rwxr-xr-x 1 root root 23468 2008-01-29 13:21 /bin/true
          > >>>>
          >
          > I wondered why it should be so large, given all it had to do was "return 0;",
          > and so I did "man true":
          >
          > <<<<<<<<<<<<<<
          > NAME
          > true - do nothing, successfully
          >
          > SYNOPSIS
          > true [ignored command line arguments]
          > true OPTION
          >
          > DESCRIPTION
          > Exit with a status code indicating success.
          >
          > --help display this help and exit
          >
          > --version
          > output version information and exit
          >
          > NOTE: your shell may have its own version of true, which usually super‐
          > sedes the version described here. Please refer to your shell's docu‐
          > mentation for details about the options it supports.
          > >>>>>>>>>>>>>
          >
          > I laughed quite a bit seeing it accepts some command-line arguments.
          >
          > Then I tried "true --help" and "true --version" which didn't print anything
          > because they were the shell's built-in true command. So I did the same
          > with "/bin/true --help" and "/bin/true --version":
          >
          > <<<<<<<<<<<<<<<<<<<
          > shlomi:~$ /bin/true --help
          > Usage: /bin/true [ignored command line arguments]
          > or: /bin/true OPTION
          > Exit with a status code indicating success.
          >
          > --help display this help and exit
          > --version output version information and exit
          >
          > NOTE: your shell may have its own version of true, which usually supersedes
          > the version described here. Please refer to your shell's documentation
          > for details about the options it supports.
          >
          > Report bugs to <bug-coreutils@...>.
          > shlomi:~$ /bin/true --version
          > true (GNU coreutils) 6.10
          > Copyright (C) 2008 Free Software Foundation, Inc.
          > License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
          > This is free software: you are free to change and redistribute it.
          > There is NO WARRANTY, to the extent permitted by law.
          >
          > Written by Jim Meyering.
          > shlomi:~$
          > >>>>>>>>>>>>>>>>>>>>
          >
          > So now I no longer wonder why it is so bloated.
          >
          > What would we do without GNU?
          >
          > Regards,
          >
          > Shlomi Fish
          >
          > ---------------------------------------------------------------------
          > Shlomi Fish shlomif@...
          > Homepage: http://www.shlomifish.org/
          >
          > I'm not an actor - I just play one on T.V.
          >
          >
          >
          > Yahoo! Groups Links
          >
          >
          >
          >
        Your message has been successfully submitted and would be delivered to recipients shortly.