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

具有特殊字符的Ruby系统命令,ruby,shell,Ruby,Shell,我需要启动一个包含两个特殊字符的系统命令 system "my command "#{$value command here}" other ARGS here" 我不能直接用 system "my command #{$value command here} other ARGS here" 我需要在value命令的开头和结尾插入字符。如何使用system实现这一点 无论何时编写系统命令,都必须执行以下两项操作之一。使用转义值以确保shell正确解析它们: require 'shellwo

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

system "my command "#{$value command here}" other ARGS here"
我不能直接用

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

我需要在value命令的开头和结尾插入字符。如何使用system实现这一点

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

require 'shellwords'
system "my command #{"$value command here".shellescape} other ARGS here"
或者您可以将参数分开,这样shell就不需要解释它们:

system("my", "command", "$value command here", "other", "ARGS", "here")
第二种形式通常更好,一切都更加明确,你不可能忘记逃避某些事情


请记住,运行包含用户数据的shell命令可能会使您面临严重风险。为了避免外壳级别的攻击,您必须避免任何未事先修复的内容。除此之外,请记住文件名可以也将包含空格,尤其是在从Windows上载的文件上,其中Untitled 1.rtf是一个非常常见的名称。

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

require 'shellwords'
system "my command #{"$value command here".shellescape} other ARGS here"
或者您可以将参数分开,这样shell就不需要解释它们:

system("my", "command", "$value command here", "other", "ARGS", "here")
第二种形式通常更好,一切都更加明确,你不可能忘记逃避某些事情


请记住,运行包含用户数据的shell命令可能会使您面临严重风险。为了避免外壳级别的攻击,您必须避免任何未事先修复的内容。除此之外,请记住文件名可以也将包含空格,尤其是在从Windows上载的文件上,在Windows中,Untitled 1.rtf是一个非常常见的名称。

谢谢您的帮助,第二种形式通常是更好的部分。system的单参数形式和backticks已经引起了很多问题。我非常喜欢ruby语法,最后我使用了您的第一个代码require'shellwords'system my command{$value command here.shellescape}其他参数here@flowdaguerre正如我们所指出的,你真的,真的,真的,真的,真的,我真的想用第二种形式。我不是开玩笑。微小的错误会让你付出巨大的代价。只有在存在安全问题的情况下,您喜欢什么才是最重要的。谢谢您的建议。第二种形式通常更好。system的单参数形式和backticks已经引起了很多问题。我非常喜欢ruby语法,最后我使用了您的第一个代码require'shellwords'system my command{$value command here.shellescape}其他参数here@flowdaguerre正如我们所指出的,你真的,真的,真的,真的,真的,我真的想用第二种形式。我不是开玩笑。微小的错误会让你付出巨大的代价。只有在存在安全问题时,您喜欢什么才是最重要的。