У меня есть следующая команда, которая возвращает многострочную строку, и я хочу поместить ее в массив и перебрать по ней, причем каждая строка будет представлять собой один элемент.array.each возвращает только первое значение в Ruby
def get_mnt_pts
`grep VolGroup /proc/self/mounts | awk '{print $2, $4}' | awk -F, '{print $1}' | awk '{print $1, $2}'`
end
в данной команде возвращает и то, что сырье ввод в массив выглядит как до раскола
/ rw
/home rw
/usr rw
/tmp rw
/var rw
/var/log rw
У меня есть следующий код, который выглядит, как он принимает, что данные и разделяет его символ новой строки и помещает его в массив. Затем я вызываю длину массива для подтверждения, и я могу вытащить значение N, но когда я делаю array.each, он всегда захватывает первое значение.
У меня такое чувство, что я сбрасываю всю строку как один элемент, но затем возвращаю обратно то, что, как я думал, должно. Я проверил документы Ruby на массивах, а также строки, чтобы узнать, могу ли я понять это. Я совершенно уверен, что создаю массив неправильно, но не знаю, как это сделать.
mount_info = Array.new
mount_info = get_mnt_pts.split("\n")
puts mount_info.length #this returns 6
mount_info.each do |pt|
puts pt #only puts the first value of/rw
end
Когда я распечатать mount_info себе я получаю следующее
print mount_info
["/ rw", "/home rw", "/usr rw", "/tmp rw", "/var rw", "/var/log rw"]
puts mount_info
/rw
/home rw
/usr rw
/tmp rw
/var rw
/var/log rw
print mount_info[4] #returns back /var rw
puts mount_info[4] #returns back /var rw
Не знаете, где смотреть здесь, любое направление было бы здорово. Конечным результатом является то, что для каждого элемента массива я хочу попытаться записать файл в этом каталоге, чтобы подтвердить, что файловая система на самом деле доступна для записи. Массив содержит список точек монтирования, и для каждой точки монтирования я буду писать Tempfile, так что блок ниже будет принимать в массиве и проходить через него.
def is_rw_test(mount_info)
mount_info.each do |pt|
Dir.exist? pt.split[0] || @crit_pt_test << "#{ pt.split[0] }"
file = Tempfile.new('.sensu', pt.split[0])
puts "The temp file we are writing to is: #{ file.path }" if config[:debug]
file.write("mops") || @crit_pt_test << "#{ pt.split[0] }"
file.read || @crit_pt_test << "#{ pt.split[0] }"
file.close
file.unlink
return @crit_pt_test
end
end
код работает отлично, но только для первого элемента в массиве, он не будет делать это для каждого, хотя, и именно поэтому я думаю, что мое назначение массива BORKED.
Благодаря
Можете ли вы включить блок кода, в котором вы фактически вызываете каждого из массива? – bigtunacan