在Ruby脚本中执行shell脚本命令

时间:2012-04-30 19:53:58

标签: ruby linux bash

我有一个非常基本的问题。我正在运行一个Ruby脚本来访问Linux中目录的内容。执行ruby脚本时,目录将通过命令行传递。

我的问题是如何在ruby命令中使用命令行参数?

我设置如下:

usrDirectory = ARGV[0]
lsCmd = `ls -l`

我需要使用像ls -l usrDirectory这样的东西。 我可以将它插入命令,就像是吗?

4 个答案:

答案 0 :(得分:2)

以上是正确的,如果你想让ls输出到标准输出,这会让它更清洁:

system("ls", "-l", dir)

这将使Ruby将输出打印到标准输出,而不是像上面那样将输出放在变量中。

答案 1 :(得分:1)

您应该能够在不使用shell的情况下获得所需内容,例如:

usr_dir = "/tmp"
files = Dir["#{usr_dir}/*"]

p files

无论您做什么,在将用户输入的文本作为将被解析和执行的内容的一部分传递给shell时,请非常小心。例如,如果用户输入(而不是目录名称)

,会发生什么
  

; rm -rf / *

答案 2 :(得分:0)

您可以在命令字符串中使用表达式扩展和转义序列:

lsCmd = `ls -l #{usrDirectory}`

答案 3 :(得分:0)

您有两种选择。你可以这样做:

lsCmd = `ls -l #{usrDirectory}`

command = "ls -l " + usrDirectory
lsCmd = %x[ #{command} ]