gpt4 book ai didi

ruby - 如何将变量传递给 ruby​​ 中的 system() 调用?

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:38 24 4
gpt4 key购买 nike

假设我在一个变量 some_var 中有一堆文本,它几乎可以是任何东西。

some_var = "Hello, I'm a \"fancy\" variable | with a pipe, double- and single-quotes (terminated and unterminated), and more."

我们还假设,在 CLI Ruby 应用程序中,我希望允许用户将该文本通过管道传输到任何 Unix 命令中。我允许他们输入类似 some_var | 的内容espeak -a 200 -v en-us,其中管道右侧的命令是安装在其系统上的任何 unix CLI 工具。

还要说的是,我已经注意将变量选择和管道从输入中分离出来,所以我 100% 确定管道后面的命令是什么。 (在这种情况下,我想将变量的内容通过管道传输到 espeak -a 200 -v en-us。)

我该怎么做?我认为我不能使用反引号方法或 %x[] 文字。我试过执行以下操作......

system("echo '#{some_var}' | espeak -a 200 -v en-us")

...但是任何特殊字符都会搞砸,我无法删除特殊字符。我该怎么办?

最佳答案

除了popen你还可以看看Shellwords.escape:

puts Shellwords.escape("I'm quoting many different \"''' quotes")
=> I\'m\ quoting\ many\ different\ \"\'\'\'\ quotes

这将为您处理引用特殊字符(bash 兼容):

system("echo '#{Shellwords.escape(some_var)}' | ....")

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html

关于ruby - 如何将变量传递给 ruby​​ 中的 system() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com