2010-10-25 295 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