# Problem executing bash script from ruby

**URL:** <https://www.ruby-forum.com/t/problem-executing-bash-script-from-ruby/172169>\
**Category:** Ruby\
**Created:** [July 16, 2009, 3:11am UTC](https://www.ruby-forum.com/t/problem-executing-bash-script-from-ruby/172169 "2009-07-16T03:11:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [July 16, 2009, 3:11am UTC](https://www.ruby-forum.com/t/problem-executing-bash-script-from-ruby/172169/1 "2009-07-16T03:11:50Z")

</div>

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::DBManager.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

–

```auto
Tom C., MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< removed_email_address@domain.invalid >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)

```

---

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [July 16, 2009, 3:28pm UTC](https://www.ruby-forum.com/t/problem-executing-bash-script-from-ruby/172169/2 "2009-07-16T15:28:36Z")

</div>

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 C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [July 16, 2009, 5:00pm UTC](https://www.ruby-forum.com/t/problem-executing-bash-script-from-ruby/172169/3 "2009-07-16T17:00:38Z")

</div>

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.

1. 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/Kernel.html#M005971](http://www.ruby-doc.org/core/classes/Kernel.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
