如何使用<读取ruby中的输入文件?在命令行?

时间:2014-02-27 22:52:11

标签: ruby input terminal command output

我希望这项工作:

./search.sh < inputFile.json

./search.sh < inputFile2.json

根据文件输出不同的内容。我想这样做:

(./search.sh < inputFile.json) > results.json

我确信语法错误。有人能把我放在正确的方向吗?我在ruby脚本中找不到如何做到这一点(我正在使用.sh但它是红宝石)。

2 个答案:

答案 0 :(得分:5)

您有多种选择。

从stdin

读取

一种选择是从stdin读取。例如,您可以在search.sh

中执行此操作
#!/usr/bin/env ruby

input = $stdin.read

puts "here's the input i got:"
puts input

假设我们有一个文件foo.txt,看起来像这样

foo
bar
baz

然后你可以将它与unix管道一起使用

~$ ./search.sh < foo.txt
here's the input i got:
foo
bar
baz

相当于

~$ cat foo.txt | ./search.sh
here's the input i got:
foo
bar
baz
虽然这对猫的使用毫无用处,只是为了服务于演示目的。您不仅可以管道文件,还可以从其他命令输出

~$ echo "hello, world!" | ./search.sh
here's the input i got:
hello, world!

如果要将输出重定向到另一个文件,请执行

~$ ./search.sh < foo.txt > bar.txt
~$ cat bar.txt
here's the input i got:
foo
bar
baz

从Ruby

读取文件

另一种方法是将文件名作为参数传递,并直接从Ruby中读取文件:

#!/usr/bin/env ruby

file = ARGV.first
input = File.read(file)

puts "here's the input i got:"
puts input

用法:

~$ ./search.sh foo.txt
here's the input i got:
asfdg
sdf
sda
f
sdfg
fsd

再次重定向输出使用>

~$ ./search.sh foo.txt > bar.txt

答案 1 :(得分:2)

我假设输入文件的内容会有所不同,您将有一些逻辑来确定。实际上,您可以只读取该文件输入,就好像它是由用户输入文本一样,并做任何您需要做的事情。

示例:

<强> test.rb

puts gets.chomp

<强> testfile的

test

<强>终端

$ ruby test.rb < testfile
$ test