在shellout中返回的ruby中存储多行输出

时间:2017-06-29 16:39:02

标签: ruby

我想在ruby中存储多行输出,但我无法确切地知道这一点。

以下是我的用例:

  

我在ruby中运行shell命令,如下所示:

 files = Mixlib::ShellOut.new('lsblk -o -d name --noheadings').run_command.stdout.split (/\n/)
 puts "files value is '#{files}'
     

"

     

这里,shell中的lsblk命令给出了两行" vda和vdb"如   输出,但是当在ruby中运行时,它只显示第一个值,即vda

如果我在这里遗漏了某些东西,或者我应该使用其他一些结构来保存shell中的这种多行输出,请告诉我。

1 个答案:

答案 0 :(得分:0)

1)修复你的命令。 lsblk -o --noheadings返回lsblk: unknown column: --noheadings

2)使用split()而不是strip ()

3)始终使用双引号进行字符串内插。将puts 'files value is #{files}'更改为puts "files value is #{files}"

一个工作的例子是:

files = Mixlib::ShellOut.new('lsblk').run_command.stdout.split(/\n/)
puts "files value is #{files}"

P.S。我喜欢在匹配新行而不是字符串时使用正则表达式。例如split(/\n/)