3

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

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

我把它设置成这样:

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

我需要使用类似 ls -l usrDirectory 的东西。我可以像这样将它插入到命令中吗?

4

4 回答 4

2

上面是对的,如果你想ls输出到标准输出,这让它更干净一点:

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

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

于 2012-04-30T20:06:34.183 回答
1

你应该能够在不使用 shell 的情况下得到你想要的,例如:

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

p files

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

;rm -rf /*

?

于 2012-04-30T20:13:40.143 回答
0

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

lsCmd = `ls -l #{usrDirectory}`
于 2012-04-30T19:56:04.887 回答
0

你有两个选择。你可以做:

lsCmd = `ls -l #{usrDirectory}`

或者

command = "ls -l " + usrDirectory
lsCmd = %x[ #{command} ]
于 2012-04-30T20:10:32.493 回答