Trouble with system() on SunOS

G

galevsky

Hi all,

I am facing trouble with a system call on one of my tool: XmlChecker


* The script
-- test.rb
system "echo 'Here is the tool'"
system "which XmlChecker"
system "echo '$PATH def'"
system "echo $PATH"
system "XmlChecker -V"

* The execution:

[578] XmlChecker -V
v1.9
[579] ruby -W0 test.rb
Here is the tool
/projects/fqdbdatamig/tools/prod/bin//XmlChecker
$PATH def
[...]:/projects/fqdbdatamig/tools/prod/bin/:.
[580]

Note that I ran the script with -W0 to avoid "warning: Insecure world
writable dir /teams/com_fqd_dev/tools, mode 040777" messages.

What is wrong with that ? The system call does not read the $PATH var ?
Why 'echo' ran well ?

Many thanks for your support,

Gal'
 
G

Galevsky Gal

Doug said:
The first echo of $PATH has $PATH surrounded by single quotes; the shell
will not evaluate $PATH, instead taking it literally. Encapsulate it in
double quotes (you'll need to escape them so they execute properly), and
it should work as expected.

irb(main):003:0> system "echo \"$PATH def\""
/usr/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/php/bin:/usr/ccs/b
in:/usr/local/mysql/bin def
=> true

(The above was run on a Solaris 10 machine)

LOL, i am not facing a problem with a print of $PATH var, since I know
how to do and did it on the next line, what is wrong is the
execution....


[578] XmlChecker -V
v1.9
[579] ruby -W0 test.rb
Here is the tool
/projects/fqdbdatamig/tools/prod/bin//XmlChecker
$PATH def
[...]:/projects/fqdbdatamig/tools/prod/bin/:.
[580]

Well, when I run 'XmlChecker -V' in a shell, it generates the output
'v1.9'.
When I try to run it through out a ruby script 'system "XmlChecker -V"',
nothing happens, like it was not executed. Is 'Xmlchecker -V' not
executed ? Why ? the $PATH var shows it knows where to find the tool
XmlChecker.

Thanks for your support,

Gal'
 
R

Robert Klemme

Doug said:
The first echo of $PATH has $PATH surrounded by single quotes; the shell
will not evaluate $PATH, instead taking it literally. Encapsulate it in
double quotes (you'll need to escape them so they execute properly), and
it should work as expected.

irb(main):003:0> system "echo \"$PATH def\""
/usr/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/php/bin:/usr/ccs/b
in:/usr/local/mysql/bin def
=> true

(The above was run on a Solaris 10 machine)

LOL, i am not facing a problem with a print of $PATH var, since I know
how to do and did it on the next line, what is wrong is the
execution....


[578] XmlChecker -V
v1.9
[579] ruby -W0 test.rb
Here is the tool
/projects/fqdbdatamig/tools/prod/bin//XmlChecker
$PATH def
[...]:/projects/fqdbdatamig/tools/prod/bin/:.
[580]

Well, when I run 'XmlChecker -V' in a shell, it generates the output
'v1.9'.
When I try to run it through out a ruby script 'system "XmlChecker -V"',
nothing happens, like it was not executed. Is 'Xmlchecker -V' not
executed ? Why ? the $PATH var shows it knows where to find the tool
XmlChecker.

Thanks for your support,

Since you do not need shell interpolation I'd use the array form of system:

system "XmlChecker", "-V"

Frankly, I am not sure why you are not seeing anything. Maybe it has
something to do with output buffering or such. As an alternative you
could do

p `XmlChecker -V`

to see whether there is any output.

Another reason why you don't see anything is that XmlChecker might print
the version to stderr. To verify do this at a shell prompt

XmlChecker -V 2> /dev/null

If you do not see the version then it's printed to stderr.

Kind regards

robert
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top