我希望这项工作:
./search.sh < inputFile.json
和
./search.sh < inputFile2.json
根据文件输出不同的内容。我想这样做:
(./search.sh < inputFile.json) > results.json
我确信语法错误。有人能把我放在正确的方向吗?我在ruby脚本中找不到如何做到这一点(我正在使用.sh但它是红宝石)。
答案 0 :(得分:5)
您有多种选择。
一种选择是从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中读取文件:
#!/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