Using Shell linux commands in Ruby!

Discussion in 'Ruby' started by Ch Asif, Oct 3, 2008.

  1. Ch Asif

    Ch Asif Guest

    I have the following text that allows for having shell linux commands
    executed and their results manipulated inside ruby code. If anyone can
    tell me a better way of doing this, or he/she can mention the pros and
    cons of this way of using shell linux commands inside ruby. I will be
    very thankful to him/her. The following text is also available on the
    link
    http://linux-certification.blogspot.com/2008/10/using-shell-commands-in-ruby.html

    The following is a step by step guide how can you write shell linux
    commands inside ruby code and get their results in customized output
    created by ruby.


    First of all execute the following command on shell prompt

    shell> vi userinfo.rb

    This will open up vi editor with a file named userinfo opened in it

    1. Press i on your keyboard, this will switch the file userinfo into
    insert mode
    2. Write the following code in it



    #Code Starts
    def user
    user = `users`
    end

    def groups
    groups = `groups`
    end

    puts "You are #{user} and you belongs to the groups \n #{groups}"
    #Code Ends

    3. Press ESC key on your keyboard to exit insert mode
    4. Now write :wq and press enter key on your keyboard

    This will throw you out to the shell prompt. On the shell prompt write
    the following command

    shell> ruby userinfo.rb

    You will the customized output like this

    You are root and you belong to the groups
    [A list of group will be displayed on this line]

    Thats it to executing shell linux commands inside your linux code
    --
    Posted via http://www.ruby-forum.com/.
     
    Ch Asif, Oct 3, 2008
    #1
    1. Advertising

  2. Ch Asif

    Lex Williams Guest

    pros and cons ?

    pro would be that you can write your own version of a binary

    con would be that a shell is spawned to execute the command

    Another way to execute a command would be through the system method. But
    then you couldn't get the command output that easily , since system
    returns an exit code .
    --
    Posted via http://www.ruby-forum.com/.
     
    Lex Williams, Oct 3, 2008
    #2
    1. Advertising

  3. Ch Asif

    Nit Khair Guest

    Ch Asif wrote:
    >


    Please also look at: %x{command}

    such as :

    dirlist=%x{ls -m}

    etc.

    Do note that you may have to chomp() the result in many cases - there
    will be the extra char at end (newline).

    btw, system() won't return the output.

    There are other variations such as "exec" which will overlay your
    current process ...

    my favorite is %x{...}
    --
    Posted via http://www.ruby-forum.com/.
     
    Nit Khair, Oct 3, 2008
    #3
  4. Ch Asif wrote:
    > I have the following text that allows for having shell linux commands
    > executed and their results manipulated inside ruby code. If anyone can
    > tell me a better way of doing this, or he/she can mention the pros and
    > cons of this way of using shell linux commands inside ruby. I will be
    > very thankful to him/her. The following text is also available on the
    > link
    > http://linux-certification.blogspot.com/2008/10/using-shell-commands-in-ruby.html
    >
    > The following is a step by step guide how can you write shell linux
    > commands inside ruby code and get their results in customized output
    > created by ruby.
    >
    >
    > First of all execute the following command on shell prompt
    >
    > shell> vi userinfo.rb
    >
    > This will open up vi editor with a file named userinfo opened in it
    >
    > 1. Press i on your keyboard, this will switch the file userinfo into
    > insert mode
    > 2. Write the following code in it
    >
    >
    >
    > #Code Starts
    > def user
    > user = `users`
    > end
    >
    > def groups
    > groups = `groups`
    > end
    >
    > puts "You are #{user} and you belongs to the groups \n #{groups}"
    > #Code Ends
    >
    > 3. Press ESC key on your keyboard to exit insert mode
    > 4. Now write :wq and press enter key on your keyboard
    >
    > This will throw you out to the shell prompt. On the shell prompt write
    > the following command
    >
    > shell> ruby userinfo.rb
    >
    > You will the customized output like this
    >
    > You are root and you belong to the groups
    > [A list of group will be displayed on this line]
    >
    > Thats it to executing shell linux commands inside your linux code
    >

    google ruby + popen
     
    Reid Thompson, Oct 3, 2008
    #4
  5. Lex Williams wrote:
    > Another way to execute a command would be through the system method.


    See also IO#popen:

    >> IO.popen('cat', 'w+') {|f| f << 'hello'; f.close_write; puts f.read }

    hello
    => nil
    >> puts $?.exitstatus

    0
    => nil

    > But then you couldn't get the command output that easily,
    > since system returns an exit code .


    Wrong. Obtaining the output of a command has nothing to do with the
    exit code:

    >> `false`

    => ""
    >> puts $?.exitstatus

    1
    => nil
    --
    Posted via http://www.ruby-forum.com/.
     
    Suraj Kurapati, Oct 3, 2008
    #5
  6. Ch Asif

    Lex Williams Guest

    > Wrong. Obtaining the output of a command has nothing to do with the
    > exit code:
    >
    >>> `false`

    > => ""
    >>> puts $?.exitstatus

    > 1
    > => nil


    Interesting example of NOT using system .
    --
    Posted via http://www.ruby-forum.com/.
     
    Lex Williams, Oct 3, 2008
    #6
  7. On Fri, Oct 3, 2008 at 6:48 AM, Lex Williams <> wrote:
    > pros and cons ?
    >
    > pro would be that you can write your own version of a binary
    >
    > con would be that a shell is spawned to execute the command
    >
    > Another way to execute a command would be through the system method. But
    > then you couldn't get the command output that easily , since system
    > returns an exit code .


    Actually Kernel#system returns true or false

    macbook:~ michaelguterl$ ri Kernel#system
    ---------------------------------------------------------- Kernel#system
    system(cmd [, arg, ...]) => true or false
    ------------------------------------------------------------------------
    Executes _cmd_ in a subshell, returning +true+ if the command was
    found and ran successfully, +false+ otherwise. An error status is
    available in +$?+. The arguments are processed in the same way as
    for +Kernel::exec+.
     
    Michael Guterl, Oct 3, 2008
    #7
  8. Ch Asif

    Lex Williams Guest

    sorry , I thought ruby went along the same way as the other languages
    about system.
    --
    Posted via http://www.ruby-forum.com/.
     
    Lex Williams, Oct 3, 2008
    #8
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Preston Crawford
    Replies:
    3
    Views:
    121
    Charles Mills
    Jul 15, 2005
  2. Kevin Skrenes
    Replies:
    6
    Views:
    226
    Robert Klemme
    Mar 17, 2007
  3. Replies:
    8
    Views:
    283
    Woody Peterson
    Sep 12, 2008
  4. Gregory Mazurek
    Replies:
    2
    Views:
    101
    Gregory Mazurek
    Jul 13, 2009
  5. Guilherme Viteri

    Ruby executing shell commands

    Guilherme Viteri, Sep 8, 2010, in forum: Ruby
    Replies:
    2
    Views:
    223
    Roger Pack
    Sep 8, 2010
Loading...

Share This Page