[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Trouble with system() on SunOS

Doug Phillips

5/16/2007 4:26:00 PM



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

2 Answers

galevsky

5/31/2007 2:04:00 PM

0

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-....

Robert Klemme

5/31/2007 2:31:00 PM

0

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,

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