内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我想处理Ruby中的命令行输入:
> cat input.txt | myprog.rb > myprog.rb < input.txt > myprog.rb arg1 arg2 arg3 ...
处理这个问题的最佳实践是什么?特别是我想处理空的STDIN,我希望有一个优雅的解决方案。
#!/usr/bin/env ruby STDIN.read.split("\n").each do |a| puts a end ARGV.each do |b| puts b end
似乎大多数答案都是假设参数是文件名,其中包含要通过 cat
发送到 stdin 的内容。
下面的每个事情都来自于参数,
如果 STDIN 来自 TTY,则忽略它。
$ cat tstarg.rb while a=(ARGV.shift or (!STDIN.tty? and STDIN.gets) ) puts a end
参数或 stdin 可以是空的,也可以是有数据的。
$ cat numbers 1 2 3 4 5 $ ./tstarg.rb a b c < numbers a b c 1 2 3 4 5