From: Garry Offord Date: 2007-09-21T03:32:45+09:00 Subject: Re: Interactive System calls within Ruby Script ------=_Part_28245_14665597.1190313164357 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Zylo: The problem is the the command pass to the system call is executed in a sub-shell, or child process. Any changes made in that sub-shell's environment is *not* reflected back to the parent. So changing the directory in the sub-shell does not affect the parent's current working directory. When you do two system calls, they are executed in two separate sub-shells, neither of which affect the other or the parent. I normally change the directory in the parent before calling system or %x{} etc: here = Dir.pwd Dir.chdir 'your-directory here' begin puts "You are now here: #{Dir.pwd}" system "your command" rescue Errno::ENOENT => e Dir.chdir here end Hope that helps a bit. On 9/20/07, ZyLo wrote: > > I'm not sure whether this is possible or not, but I know that Ruby > allows you to make system calls in many different ways, and I > generally use: > > system "echo Hello" > > or something when I want to call outside of the script. What I would > like to know is if it is possible to make these system calls > interactive? For instance, I was toying with directory manipulation > using system "cd .." system "pwd", etc., and I noticed that no matter > what the call, Ruby will always return to the same directory on the > system "pwd" command. > > I was wondering if it is possible to send multiple commands so you > could be a bit more interactive with it? I know there are libraries > out there to do this for me, but I am looking at this more from the > standpoint that I'm not planning on using this ability for directory > manipulation. > > Another thing I was wondering is whether you can get output from the > terminal on system calls. I tried somethign like this: > > system "pwd" > gets directorystring > puts directorystring > > Only my script doesn't get the input at all, and hangs(expecting an > input I assume). > > How can you usefully use system for calling functions if it doesn't > remember state(directory, for instance), or allow you to get back > terminal information? > > > ------=_Part_28245_14665597.1190313164357--