带有特殊字符的红宝石系统命令



我需要启动一个带有两个特殊字符的系统命令

system "my command "#{$value command here}" other ARGS here"

我不能直接使用

system "my command #{$value command here} other ARGS here"

我需要在我的值命令的开始和末尾插入 "字符。我如何使用系统做到这一点?

每当要编写系统命令时,您必须做两件事之一。要么使用shellescape逃脱值以确保外壳正确解析它们:

require 'shellwords'
system "my command #{"$value command here".shellescape} other ARGS here"

,或者您可以分别拆分参数,因此外壳不需要解释它们:

system("my", "command", "$value command here", "other", "ARGS", "here")

第二种形式通常更好,一切都更加明确,并且没有机会忘记逃脱。

请记住,运行包含用户数据的外壳命令可能会使您面临严重的风险。您绝对必须逃脱任何事先确定的一切,以免避免使用壳级的利用。最重要的是,请记住文件名可以并且将包含空格,尤其是在Untitled (1).rtf是一个非常通用名称的Windows上传的文件上。

最新更新