在终端中运行带有输入文件的Ruby文件?

时间:2011-12-22 05:01:39

标签: ruby ruby-1.9

我想在终端

中做这样的事情
$ ruby quicksort.rb unsorted.txt

quicksort.rb是我要运行的ruby文件unsorted.txt是包含未排序数字的输入文件。是否有可能在ruby中做这样的事情?

谢谢。

5 个答案:

答案 0 :(得分:3)

ARGF使这项任务变得简单,几乎和Perl的<>运算符一样简单:

$ cat quicksort.rb 
#!/usr/bin/ruby

ARGF.each do |line|
    puts line
end
$ ruby quicksort.rb /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...

您可能希望为此extremely helpful quick guide to Ruby IO添加书签。

答案 1 :(得分:3)

您可以阅读命令行参数并执行文件操作。读取你可以使用的参数

ARGV.each do|a|
  puts "Argument: #{a}"
end

这样您就可以获取文件名并获取内容。

答案 2 :(得分:2)

对于参数,请使用argv

ARGV.each do|file|
file
end

然后你可以阅读文件的内容:

f = File.open(file, File::RDONLY)

答案 3 :(得分:1)

虽然我喜欢在Ruby中解决问题,但我想指出:

> sort unsorted.txt > sorted.txt

如果你有一个体面的(* nix)命令行。但也许你想做的不仅仅是排序?

答案 4 :(得分:1)

只需阅读标准版,shell就可以轻松完成:

#!/usr/bin/env ruby
puts $stdin.read.reverse

然后使用“&lt;”将包含“foobar”的bar.txt文件的内容转发到您的程序中。

$ ruby foo.rb  < bar.txt 
raboof

与您想要做的更匹配的另一个解决方案是:

#!/usr/bin/env ruby
puts IO.read(ARGV[0]).reverse

运行它:

$ ruby foo.rb bar.txt 

raboof