2017-06-29 8 views
0

私はルビに複数行の出力を保存したいが、私はこれに対して正確な方法を得ることができない。以下は複数の出力行をシェルアウトから返されたrubyに格納

は私のユースケースである:

次のように私はルビーでのシェルコマンドを実行しています:

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

をここでは、シェルでlsblkコマンドは、として2つの行を提供します"vdaとvdb"は と出力されますが、ルビーで実行した場合、最初の値、つまりvda

私はここで何かが見つからないか、シェルからそのようなマルチライン出力を保持するために他の構造を使用する必要があるかどうかを教えてください。

+0

_Sidenote:_ ** never **関数/メソッド名とかっこの間にスペースを入れます。 – mudasobwa

+0

実行中のコマンドが不正な形式ですか? '#lsblk -o --noheadings'を実行すると、' lsblk:unknown column:--noheadings'が返されます。 – Jakir00

+0

提案通りにコードを更新しました。本当に感謝される.. –

答えて

0

1)コマンドを修正してください。 lsblk -o --noheadings戻りlsblk: unknown column: --noheadings

2)がないstrip()

3)常に内の文字列の補間のための二重引用符を使用split()を使用してください。

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

P.S.:puts 'files value is #{files}'実施例のようになり

puts "files value is #{files}"にを変更私は文字列の代わりに新しい行を照合するときに正規表現を使うのが好きです。例えば split(/\n/)

関連する問題