Forum: Ruby Trouble with system() on SunOS

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B2929c23668f4fb7a56a6b21590a2f12?d=identicon&s=25 galevsky (Guest)
on 2007-05-16 16:23
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'
7b0e3a2c135e6f67edf3194ee501961d?d=identicon&s=25 Doug Phillips (Guest)
on 2007-05-16 18:25
(Received via mailing list)
>
>
> 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)
B2929c23668f4fb7a56a6b21590a2f12?d=identicon&s=25 Galevsky gal (galevsky)
on 2007-05-31 16:03
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'
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2007-05-31 16:36
(Received via mailing list)
On 31.05.2007 16:03, Galevsky Gal 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
This topic is locked and can not be replied to.