在 ruby 脚本中调用命令

Calling a command inside a ruby script

有没有办法在 ruby 脚本中调用像 last 这样的命令?我可以使用 %x 在脚本中调用 lsls -l 之类的命令,但是对于最后一个命令提供的复杂且不断扩展的日志信息来说,这是否可以接受?

这是一个示例,用于检索用户名、IP、启动和持续时间:

%x(last -i).each_line do |line|
  line.chomp!                             # Removes newline
  break if line.empty?                    # last is done

  # 3 possibilities to extract information :
  user, *other_columns = line.split(' ')  # 1. Use split
  start = Time.parse(line[39,16])         # 2. Use known position of a column
  ip    = line[22,17].strip
  if line =~/\((\d+):(\d+)\)/             # 3. Use a regex
    duration = .to_i*60+.to_i
  else
    duration = nil
  end

  info={user: user, ip: ip, start: start, duration: duration}
  #TODO: Check that user isn't "reboot"
  puts info
end


# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 21:29:00 +0100, :duration=>141}
# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 15:21:00 +0100, :duration=>57}

您具体需要哪些信息?