# Output redirection in windows

**URL:** <https://www.ruby-forum.com/t/output-redirection-in-windows/59830>\
**Category:** Ruby\
**Created:** [May 7, 2006, 6:36am UTC](https://www.ruby-forum.com/t/output-redirection-in-windows/59830 "2006-05-07T06:36:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![adityam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/73ab20/32.png) [@adityam](https://www.ruby-forum.com/u/adityam)\
**Post date:** [May 7, 2006, 6:36am UTC](https://www.ruby-forum.com/t/output-redirection-in-windows/59830/1 "2006-05-07T06:36:33Z")

</div>

I am using the one-click installer on windows (RC2). I can not get  
output redirection to work with Kernel.system. Consider the following  
code

F:\tmp\cont-test\test\>cat test.rb  
def test(command)  
puts command  
puts Kernel.system(command)  
puts “---------------------------”  
end

test(“mpto mp-test-01.mp”)  
test(“mpto mp-test-01.mp \> mp-test-01-test.tex”)

mpto.exe is a helper program that comes with metapost and is part of  
most tex  
distributions. It is included in my path environment. I have a file  
mp-test-01.mp in the current directory. mpto scans the .mp file and  
outputs on  
stdout. I want to redirect that output to a file. But \> does not work.

Running this program gives

## F:\tmp\cont-test\test\>ruby test.rb mpto mp-test-01.mp \gdef\mpxshipout{\shipout\hbox\bgroup \setbox0=\hbox\bgroup} \gdef\stopmpxshipout{\egroup \dimen0=\ht0 \advance\dimen0\dp0 \dimen1=\ht0 \dimen2=\dp0 \setbox0=\hbox\bgroup \box0 \ifnum\dimen0\>0 \vrule width1sp height\dimen1 depth\dimen2 \else \vrule width1sp height1sp depth0sp\relax \fi\egroup \ht0=0pt \dp0=0pt \box0 \egroup} \mpxshipout% line 2 mp-test-01.mp This is a test\stopmpxshipout \end{document} true

## mpto mp-test-01.mp \> mp-test-01-test.tex false

system “mpto …” executes correctly (the true after \end{document})  
while system “mpto … \> …” fails. No mp-test-01-test.tex file is  
created.

When I give the same commands from cmd.exe they work. I am confused why  
something as simple as output redirection is not working. What is the  
correct  
way to do this?

Thanks,  
Aditya

---

<div class="post-metadata">

**Author:** ![adityam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/73ab20/32.png) [@adityam](https://www.ruby-forum.com/u/adityam)\
**Post date:** [May 7, 2006, 7:28am UTC](https://www.ruby-forum.com/t/output-redirection-in-windows/59830/2 "2006-05-07T07:28:05Z")

</div>

It works for me on the latest One-Click:

C:\_Ryan\downloads\>irb  
irb(main):001:0\> system(‘echo “hello world!” \> hello.txt’)  
=\> true  
irb(main):002:0\> exit

C:\_Ryan\downloads\>type hello.txt  
“hello world!”

Another option is to do the redirection yourself:

File.open(‘output.txt’, ‘w’) do |file|  
IO.popen(‘dir’) do |pipe|  
pipe.each do |line|  
file.print line  
end  
end  
end

Ryan

---

<div class="post-metadata">

**Author:** ![adityam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/73ab20/32.png) [@adityam](https://www.ruby-forum.com/u/adityam)\
**Post date:** [May 7, 2006, 6:27pm UTC](https://www.ruby-forum.com/t/output-redirection-in-windows/59830/3 "2006-05-07T18:27:55Z")

</div>

On Sun, 7 May 2006, Ryan L. wrote:

> It works for me on the latest One-Click:
> 
> C:\_Ryan\downloads\>irb  
> irb(main):001:0\> system(‘echo “hello world!” \> hello.txt’)  
> =\> true  
> irb(main):002:0\> exit
> 
> C:\_Ryan\downloads\>type hello.txt  
> “hello world!”

Strange, I get

E:\Temp\>irb  
irb(main):001:0\> system(‘echo “hello world” \> hello.txt’)  
=\> false  
irb(main):002:0\> exit

E:\Temp\>type hello.txt  
The system cannot find the file specified.

Can it be because I also have cygwin installed?

> Another option is to do the redirection yourself:
> 
> File.open(‘output.txt’, ‘w’) do |file|  
> IO.popen(‘dir’) do |pipe|  
> pipe.each do |line|  
> file.print line  
> end  
> end  
> end

How can I pass arguments to the pipe?  
E:\Temp\>irb  
irb(main):003:0\> File.open(‘output.txt’, ‘w’) do |file|  
irb(main):004:1\* IO.popen(‘echo “Hello world”’) do |pipe|  
irb(main):005:2\* pipe.each do |line|  
irb(main):006:3\* file.print line  
irb(main):007:3\> end  
irb(main):008:2\> end  
irb(main):009:1\> end  
Errno::ENOENT: No such file or directory - echo “Hello world”  
from (irb):4:in `popen’  
from (irb):4  
from (irb):3

> Ryan

Thanks,  
Aditya

---

<div class="post-metadata">

**Author:** ![adityam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/73ab20/32.png) [@adityam](https://www.ruby-forum.com/u/adityam)\
**Post date:** [May 7, 2006, 7:37pm UTC](https://www.ruby-forum.com/t/output-redirection-in-windows/59830/4 "2006-05-07T19:37:55Z")

</div>

On 5/7/06, Aditya M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Strange, I get
> 
> E:\Temp\>irb  
> irb(main):001:0\> system(‘echo “hello world” \> hello.txt’)  
> =\> false

This false result means that system could not find echo.

> Can it be because I also have cygwin installed?

It may be related. The problem is that the system method cannot  
execute what you are trying to run. It might be related to your path  
or who knows what.

> Errno::ENOENT: No such file or directory - echo “Hello world”

Again this seems to be a problem with your environment.

Ryan
