2017-09-25 147 views
1

我需要两个字符特价推出内部有特殊字符

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

系统命令的Ruby系统命令我不能直接使用

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

我需要在开始时插入"字符和我的价值命令的结束。我可以使用系统来做到这一点?

回答

6

无论何时您编写系统命令,您都必须执行中的一项。或者使用shellescape,以确保外壳正确分析它们逃避值:

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

或者你可以单独拆分出来的参数,以便外壳不需要解释它们:

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

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

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

+2

谢谢你的“第二种形式通常更好”的一部分。 “系统”的单一参数形式(以及反作用)造成了许多问题。 –

+0

我真的很喜欢ruby语法,我最终使用你的第一个代码'require'shellwords' system“我的命令#{”$ value command here“.shellescape}其他ARGS在这里”' –

+1

@flowdaguerre正如我们已经指出的那样,你真的,真的,真的,真的,*真的*想要使用第二种形式。我不是在开玩笑。微小的错误会让你付出巨大的代价。当你遇到安全问题时,你所选择的只是那么重要。 – tadman