Trouble with system() on SunOS


#1

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’


#2

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 ?
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)


#3

Doug P. wrote:

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 ?
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’


#4

On 31.05.2007 16:03, Galevsky G. wrote:

double quotes (you’ll need to escape them so they execute properly), and
how to do and did it on the next line, what is wrong is the
[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