Ruby on rails 解析从bash脚本到Rails的输出

Ruby on rails 解析从bash脚本到Rails的输出,ruby-on-rails,ruby,bash,Ruby On Rails,Ruby,Bash,我有一个来自另一个stackoverflow问题的bash脚本来获取我所有的串行连接设备: #!/bin/bash for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do ( syspath="${sysdevpath%/dev}" devname="$(udevadm info -q name -p $syspath)" [[ "$devname" == "bu

我有一个来自另一个stackoverflow问题的bash脚本来获取我所有的串行连接设备:

#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
    (
        syspath="${sysdevpath%/dev}"
        devname="$(udevadm info -q name -p $syspath)"
        [[ "$devname" == "bus/"* ]] && continue
        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && continue
        echo "{name: '/dev/$devname', id_serial: '$ID_SERIAL'}"
    )
done
我试图将它们解析为对象数组,以便在Rails视图中迭代和显示它们。输出如下:

{name: '/dev/input/event16', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/input/mouse2', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/hidraw0', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/usb/hiddev3', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/input/event17', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/hidraw1', id_serial: 'Logitech_USB_Receiver'}
{name: '/dev/input/event15', id_serial: 'SunplusIT_INC._Integrated_Camera'}
{name: '/dev/media0', id_serial: 'SunplusIT_INC._Integrated_Camera'}
{name: '/dev/video0', id_serial: 'SunplusIT_INC._Integrated_Camera'}
在Rails控制台中,这是输出:

2.2.4 :001 > `./lib/scripts/get_serial.sh`
 => "{name: '/dev/input/event16', id_serial: 'Logitech_USB_Receiver'}\n{name: '/dev/input/mouse2', id_serial: 'Logitech_USB_Receiver'}\n{name: '/dev/hidraw0', id_serial: 'Logitech_USB_Receiver'}\n{name: '/dev/usb/hiddev3', id_serial: 'Logitech_USB_Receiver'}\n{name: '/dev/input/event17', id_serial: 'Logitech_USB_Receiver'}\n{name: '/dev/hidraw1', id_serial: 'Logitech_USB_Receiver'}{name: '/dev/media0', id_serial: 'SunplusIT_INC._Integrated_Camera'}\n{name: '/dev/video0', id_serial: 'SunplusIT_INC._Integrated_Camera'}\n"
所以我尝试在我的控制器中像这样解析它:

def index
   @devices = `./lib/scripts/get_serial.sh`.strip.gsub(" ","").split("\n")
end
如果我做了
@devices[0]
,结果是:
=>“{name:'/dev/input/event16',id\u serial:'Logitech\u USB\u Receiver'}”

最后,我们认为:

<ul>
  <% @devices.each do |device| %>
    <li><%= device %> </li>
  <% end %>
</ul>
显示所有设备,但如果我显示了
,我会得到一个错误或
我会得到一个单词“name”

我的问题很简单。是否有更好的方法来执行此操作并将
:name
:id\u serial
作为典型变量处理(迭代数组并打印它们)?

而不是:

@devices = `./lib/scripts/get_serial.sh`.strip.gsub(" ","").split("\n")
尝试使用:

@devices = `./lib/scripts/get_serial.sh`.split("\n").map {|hash_string| eval(hash_string)}

有关详细说明,请检查不幸的是
设备['name']
在视图中显示空/空值。@ChrisV。为什么要这样做呢?试试
device[:name]
如果你不解释这一点,我将辞去我的工作,成为一名面包师或垃圾收集器。@ChrisV。符号不是字符串。看看这个,应该有帮助:我指的是地图和评估,而不是符号。你认为有更简单的方法来完成这个(整个想法)?