我有一个非常基本的问题。我正在运行一个 Ruby 脚本来访问 Linux 中目录的内容。执行 ruby 脚本时,该目录通过命令行传递。
我的问题是如何在 ruby 的命令中使用命令行参数?
我把它设置成这样:
usrDirectory = ARGV[0]
lsCmd = `ls -l`
我需要使用类似 ls -l usrDirectory 的东西。我可以像这样将它插入到命令中吗?
上面是对的,如果你想ls
输出到标准输出,这让它更干净一点:
system("ls", "-l", dir)
这将使 Ruby 将输出打印到您的标准输出,而不是像上面那样将输出放入变量中。
你应该能够在不使用 shell 的情况下得到你想要的,例如:
usr_dir = "/tmp"
files = Dir["#{usr_dir}/*"]
p files
无论您做什么,在将用户输入的文本作为将被解析和执行的内容的一部分传递给 shell 时都要非常小心。例如,如果用户输入(而不是目录名称)会发生什么
;rm -rf /*
?
您可以在命令字符串中使用表达式扩展和转义序列:
lsCmd = `ls -l #{usrDirectory}`
你有两个选择。你可以做:
lsCmd = `ls -l #{usrDirectory}`
或者
command = "ls -l " + usrDirectory
lsCmd = %x[ #{command} ]