From: Jan Svitok Date: 2006-11-24T01:44:47+09:00 Subject: Re: invoke system command from within a method On 11/22/06, Moritz Reiter wrote: > Hi all, > > I am new to Ruby and want to make a Ruby script for the network > configuration of my notebook as an exercise. Now I encountered a problem > which is pretty strange to me: > > I want to invoke '/etc/init.d/networking restart' from within my Ruby > program. If I create a file with the line > > %x{ /etc/init.d/networking restart } > > it works like I would expect. The networking init script gets invoked > and correctly processed. > > But if I do something like this: > > - -->8-- > class Netconf > def restart > puts %x{ /etc/init.d/networking restart } > end > end > > netconf = Netconf.new > netconf.restart > - --8<-- > > I get some output from the init script but it doesn't seem to actually > do anything. It does not reconfigure my eth's in oppostion to the > behaviour described above if don't make the system call from within a > method. > > I would be very glad if anyone could give me a hint or point me to some > documentation to enlighten me. More blind tips: 1. try adding code to that %x{...} in smaller chunks: (without class & puts, add method) def restart ; %x{...} ; end (without method and class, add puts) (add puts and method) 2. I suspect stderr might be a problem. Try adding 2>/dev/null 3. Try adding sh before the command 4. Have a look at the actual script and see what could be a problem. Optionally add some traces there to see how far does it get. 5. The documentation is at Kernel#`, and the ultimate documentation is in /usr/local/src/ruby/io.c, function rb_f_backquote() ;-)