2010-10-25 250 views
1

这不是在红宝石工作,我不明白为什么?从ruby执行shell命令

#!/usr/bin/env ruby 

exec "sort data.txt > data.sort" 

data.txt是逗号隔开的文件。无论如何..如果我尝试在shell中执行该行,它可以毫无问题地工作。

当我尝试从脚本运行这个脚本时,我得到一个空文件。

回答

0

这是不是一个真正的答案,但我想分享你的原高管的使用实际上是为我工作。这是我设置它的方式。

的data.txt

"1,2,3,4,5,6,7,8" 

sort.rb(我不知道你做了排序,所以我只是写相同的数据出了什么)

File.open(ARGV[0]){|f| puts f.read} 

IRB会议

irb(main):001:0> exec "sort data.txt > data.sort" 

当我在irb中运行它时,我确实得到了一个data.sort输出文件,并且它包含了“1,2,3,4,5,6,7,8”,如预期的那样。我可以通过irb或从另一个ruby文件运行相同的exec行,并且每次都得到包含数据的输出文件。

我在32位Windows XP系统上运行Ruby 1.8.6。

+0

哦..我想我知道发生了什么......我实际上是在自己的文件上面写了几行文件。 file = File.new(“data.txt”,“w”),然后它可能没有刷新到磁盘..所以当它实际执行命令时,没有什么可以排序的。我如何刷新磁盘? – 2010-10-25 18:07:18

+0

啊..我需要关闭文件file.close – 2010-10-25 18:15:41

+0

谢谢,我通过讨论他们找出事情。 – 2010-10-25 18:17:30

0

你试过

%x(sort data.txt > data.sort) 
+0

我只是试过,它没有工作..我用你的行为替换exec行吗? – 2010-10-25 17:27:24

+0

哦..我想我现在知道发生了什么......我实际上是在自己的文件上面写了几行文件。 file = File.new(“data.txt”,“w”),然后它可能没有刷新到磁盘..所以当它实际执行命令时,没有什么可以排序的。我如何刷新磁盘? - Ted Flethuseo 8分钟前 啊..我需要关闭文件file.close – 2010-10-25 18:16:28