System() and changing (path-)environment

Hi!

I want to replace some shellscripts using ruby and therefore I need a
method to execute external scripts (ksh). Without rewriting a lot of
scripts, I need the possibility to execute external scripts in another
directory (as the ruby-script) but within their directory context:

path1 -> rubyscript.rb
         module.rb

path2 -> shellscript.ksh
         anotherscript.ksh
         path3 -> last_script.ksh
                  found_another_one.pl

shellscript.ksh calls the other scripts using relative path statements
but when I use system("path2/shellscript.ksh"), shellscript.ksh is
started with the rubyscript.rb-directory context and within
shellscript.ksh, the call of "./anotherscript.ksh" or
"path3/last_script.ksh" results in "script not found here you fool!".

I tried some things like
   system("cd path2; shellscript.ksh")
   system("ENVIRONMENTVARIABLE=something shellscript.ksh")
but none of them worked out.

What do you suggest?

···

--
Karl Voit

Hi...

Karl Voit <devnull@Karl-Voit.at> writes:

[...]

shellscript.ksh calls the other scripts using relative path
statements but when I use system("path2/shellscript.ksh"),
shellscript.ksh is started with the rubyscript.rb-directory context
and within shellscript.ksh, the call of "./anotherscript.ksh" or
"path3/last_script.ksh" results in "script not found here you
fool!".

[...]

What do you suggest?

Try Dir.chdir(path) prior to the system calls, maybe?

Jim

Karl Voit wrote:

Hi!

I want to replace some shellscripts using ruby and therefore I need a
method to execute external scripts (ksh). Without rewriting a lot of
scripts, I need the possibility to execute external scripts in another
directory (as the ruby-script) but within their directory context:

path1 -> rubyscript.rb
         module.rb

path2 -> shellscript.ksh
         anotherscript.ksh
         path3 -> last_script.ksh
                  found_another_one.pl

shellscript.ksh calls the other scripts using relative path statements
but when I use system("path2/shellscript.ksh"), shellscript.ksh is
started with the rubyscript.rb-directory context and within
shellscript.ksh, the call of "./anotherscript.ksh" or
"path3/last_script.ksh" results in "script not found here you fool!".

I tried some things like
   system("cd path2; shellscript.ksh")
   system("ENVIRONMENTVARIABLE=something shellscript.ksh")
but none of them worked out.

What do you suggest?

You can use Dir.chdir to temporarily change the current directory:

Dir.chdir('path2') do
    system('shellscript.ksh')
end

After the block the current directory returns to its former state.

Thanks for the hint! I did not knew the class Dir before!

···

* Timothy Hunter <TimHunter@nc.rr.com> wrote:

  
You can use Dir.chdir to temporarily change the current directory:

Dir.chdir('path2') do
    system('shellscript.ksh')
end

After the block the current directory returns to its former state.

--
Karl Voit
                                    http://www.Karl-Voit.at/scripts/#bmconverter