Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > problem executing bash script from ruby

Reply
Thread Tools

problem executing bash script from ruby

 
 
Tom Cloyd
Guest
Posts: n/a
 
      07-16-2009
I have little experience with this sort of thing, but it looked fairly
straightforward. I'm in trouble, however.

Details:

From /home/tomc/Ruby-work/setnet/bin/ I launch "./setnet". This dir
contains:
mkrdoc.sh setnet

"./setnet" contains these lines (among others), and works fine:

manager = SN:BManager.new()
manager.startup

The "SN.rb" module is in "/home/tomc/Ruby-work/setnet/lib/setnet", and
contains a method with this code snippet -

puts "\n=== generating new rdocs for SetNet ==="
system("ls") # to verify where I am in the filesystem
system("./mkrdoc.sh")
if $? != 0
puts "*** command failed: status = #{$?.exitstatus}"
end

This snippet executes by means of selection from a menu, with this result -

=== generating new rdocs for SetNet ===
mkrdoc.sh setnet
*** command failed: status = 127

mkrdoc.sh contains:

cd ../lib/setnet
echo "dir--"
ls
echo "rdoc executing --"
rdoc -N -x ./doc

What I'm trying to do is acquire the functionality of generating new
rdocs for my program without having to manually go back to a command
line. Every attempt I made to make a single "system()" call from within
ruby, to generate the rdocs, have failed. In my experience, rdoc is
excessively quirky. I've spent most of today trying to get it to do some
simple things, and failing, even though I've very carefully following
the documentation. I do have something that works - that "rdoc -N -s
/doc" command, but only when it's executed from within the right dir.

Since -
* I'm allowed one command per "system()" call, and
* upon return from that call, the present working dir is reset to its
prior state...

my only option appears to be to issue the commands I'd use in a manual
interaction with the CLI from within a script file, and that's what I'm
trying to do.

My questions:

1. Is there some obvious reason by my attempt to execute mkrdoc.sh is
failing?
2. How can I make use of the process status output I've captured? I've
searched Pickax 3rd ed., and with Google, and I'm not receiving much
enlightenment. What do the "big boys/girls" do with this status output?

Thanks very much for any help anyone can offer.

Tom

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< http://www.velocityreviews.com/forums/(E-Mail Removed) >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~


 
Reply With Quote
 
 
 
 
Louis-Philippe
Guest
Posts: n/a
 
      07-16-2009
[Note: parts of this message were removed to make it a legal post.]

An option would be to run the bash script inside a PTY... but that makes it
simply to complex for something that could all be done from within ruby...Have
you try calling rdoc straight from ruby instead of bash?

2009/7/15 Tom Cloyd <(E-Mail Removed)>

> I have little experience with this sort of thing, but it looked fairly
> straightforward. I'm in trouble, however.
>
> Details:
>
> From /home/tomc/Ruby-work/setnet/bin/ I launch "./setnet". This dir
> contains:
> mkrdoc.sh setnet
>
> "./setnet" contains these lines (among others), and works fine:
>
> manager = SN:BManager.new()
> manager.startup
>
> The "SN.rb" module is in "/home/tomc/Ruby-work/setnet/lib/setnet", and
> contains a method with this code snippet -
>
> puts "\n=== generating new rdocs for SetNet ==="
> system("ls") # to verify where I am in the filesystem
> system("./mkrdoc.sh")
> if $? != 0
> puts "*** command failed: status = #{$?.exitstatus}"
> end
>
> This snippet executes by means of selection from a menu, with this result -
>
> === generating new rdocs for SetNet ===
> mkrdoc.sh setnet *** command failed: status = 127
> mkrdoc.sh contains:
>
> cd ../lib/setnet
> echo "dir--"
> ls
> echo "rdoc executing --"
> rdoc -N -x ./doc
>
> What I'm trying to do is acquire the functionality of generating new rdocs
> for my program without having to manually go back to a command line. Every
> attempt I made to make a single "system()" call from within ruby, to
> generate the rdocs, have failed. In my experience, rdoc is excessively
> quirky. I've spent most of today trying to get it to do some simple things,
> and failing, even though I've very carefully following the documentation. I
> do have something that works - that "rdoc -N -s ./doc" command, but only
> when it's executed from within the right dir.
>
> Since -
> * I'm allowed one command per "system()" call, and
> * upon return from that call, the present working dir is reset to its prior
> state...
>
> my only option appears to be to issue the commands I'd use in a manual
> interaction with the CLI from within a script file, and that's what I'm
> trying to do.
>
> My questions:
>
> 1. Is there some obvious reason by my attempt to execute mkrdoc.sh is
> failing?
> 2. How can I make use of the process status output I've captured? I've
> searched Pickax 3rd ed., and with Google, and I'm not receiving much
> enlightenment. What do the "big boys/girls" do with this status output?
>
> Thanks very much for any help anyone can offer.
>
> Tom
>
> --
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~
> Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
> Bellingham, Washington, U.S.A: (360) 920-1226
> << (E-Mail Removed) >> (email)
> << TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental
> health weblog)
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~
>
>
>


 
Reply With Quote
 
 
 
 
Luke Cowell
Guest
Posts: n/a
 
      07-16-2009
1) I googled: exist status 127 - here's the response:
If a command is not found, the child process created to execute it
returns a status of 127.

I think you should try specifying the absolute path of the shell script.

2) If you want to capture the output of your command, you should use the
%x{} notation or the `` notation.

c = %x{pwd}
is equivalent to:
c = `pwd`

the system command differs from these in that it output the results to
stdout and any assignments just contain true or false depending on the
exit status. That would be useful if you wanted to run a script and
cared only about whether the script was successful or not.

a = system("pwd")
puts a
0

check out:
http://www.ruby-doc.org/core/classes...l.html#M005971

Here's another example summarizing what I've described here. You'd
probably do well to open irb and type the commands out individually.

lukebook:~ lukec$ irb
irb(main):001:0> a = `pwd`
=> "/Users/lukec\n"
irb(main):002:0> puts a
/Users/lukec
=> nil
irb(main):003:0> a.upcase
=> "/USERS/LUKEC\n"


Luke
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
problem executing bash script from ruby - resend Tom Cloyd Ruby 2 07-16-2009 03:20 PM
Re: Terminate a python script from linux shell / bash script norseman Python 0 07-10-2008 09:44 PM
RE: Terminate a python script from linux shell / bash script Gros Bedo Python 1 07-10-2008 08:50 PM
Terminate a python script from linux shell / bash script Gros Bedo Python 2 07-10-2008 08:42 AM
(patch for Bash) GTK+2 + Bash William Park XML 3 07-14-2005 12:09 AM



Advertisments