带有特殊字符的Ruby系统命令

时间:2017-09-25 17:09:31

标签: ruby shell

我需要在

中启动一个带有两个特殊字符的系统命令
system "my command "#{$value command here}" other ARGS here"

我无法直接使用

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

我需要在我的value命令的开头和结尾插入"字符。我怎么能用系统做到这一点?

1 个答案:

答案 0 :(得分:6)

每当您编写系统命令时,必须执行以下两项操作之一。使用shellescape转义值以确保shell正确解析它们:

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

或者您可以单独拆分参数,以便shell不需要解释它们:

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

第二种形式通常更好,一切都更明确,你没有机会忘记逃避某些事情。

请记住,运行包含用户数据的shell命令会使您面临严重风险。你绝对必须提前逃避任何事情以及你没有事先修复的所有内容以避免shell级攻击。最重要的是,记住文件名可以并且将包含空格,尤其是从Windows上传的文件,其中Untitled (1).rtf是一个非常常见的名称。