Trouble with system() on SunOS

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'

···

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

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)

···

-----Original Message-----
From: list-bounce@example.com
[mailto:list-bounce@example.com] On Behalf Of galevsky
Sent: Wednesday, May 16, 2007 9:23 AM
To: ruby-talk ML
Subject: Trouble with system() on SunOS

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 ?

Doug Phillips 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'

···

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

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

···

On 31.05.2007 16:03, Galevsky Gal wrote:

Doug Phillips 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,