2013-02-13 88 views
0

这是我为我的小红宝石程序所做的。它可能看起来微不足道,但似乎并不奏效。Ruby尝试使用%x来打印命令行输出

#!/usr/bin/ruby 

location = "/home/" 

puts %x ("ls " + location) 

我得到一个错误,说这句话的语法错误,意想不到的tSTRING_BEG,期待$结束 把%×( “LS” +位置)。

有人可以给我一个解释我做错了什么吗?谢谢

回答

0

你需要把紧邻%x支架或者它不是语法有效:

%x(...) # Valid, enclosed with brackets. 
%x (...) # Invalid, %x alone makes no sense. 

%q等,%x可以使用[ ]{ }< >的支架。

+0

谢谢,就是这样。像一个魅力工作 – user1787282 2013-02-13 21:51:58

+0

我认为有趣的是'x = ['a','b','c']; x [1] =>'a''起作用。也许这是解析器的错误。 – sunnyrjuneja 2013-02-13 21:54:56

+0

是否有理由不让我在当前工作目录之外使用ls?任何时候我用%x(“ls somelocation /”) 我离开sh:1:ls:找不到 – user1787282 2013-02-13 21:59:01

1

你想:

#!/usr/bin/ruby 
location = "/home/" 

puts %x(ls #{location}) 

注%x和位置之间的空间,你不需要引号。

+0

有没有理由不让我在当前工作目录之外使用ls?任何时候我使用%x(“ls somelocation /”),我将离开sh:1:ls:找不到 – user1787282 2013-02-13 22:01:18

+0

ls somelocation /将永远相对于当前目录,它等同于ls ./somelocation/。 – rainkinz 2013-02-13 22:04:46

+0

是的,它是一样的。 – user1787282 2013-02-13 22:07:07

0

您正在添加%x(之间的空格。以下将工作:

location = "/home/" 

puts %x[ls #{location}] 
puts %x(ls #{location}) 
puts `ls #{location}` 
puts exec "ls #{location}"