在Ruby中将%x()评估为True或False

时间:2010-06-25 13:42:38

标签: ruby

我正在做这样的事情:

$printer = %x(lpstat -p | grep -q "Eileen" && echo "true" || echo "nil").chomp

if $printer == "true"
  puts "do something here"
else
  puts "do something else"
end

有更简单/更短的方法吗?我只是检查是否存在打印队列,如果确实存在,则需要执行一项操作,如果不存在则需要执行另一项操作。谢谢!

2 个答案:

答案 0 :(得分:4)

if system 'lpstat -p | grep -q "Eileen"'
  puts "do something here"
else
  puts "do something else"
end

但是,这会将命令的输出打印到stdout。如果你想避免这种情况,你可以这样做:

output = %x(lpstat -p | grep -q "Eileen")
if $?.success?
  puts "do something here"
else
  puts "do something else"
end

答案 1 :(得分:4)

如果在ruby脚本中使用lpstat -p,则可以测试输出。

printer = %x(lpstat -p)

if printer =~ /Eileen/
  puts "do something here"
else
  puts "do something else"
end

PS:你可能不需要在这里使用全局 - 甚至是变量:

  if %x(lpstat -p) =~ /Eileen/