【问题标题】:Ruby string single quotes causing troubleRuby字符串单引号引起麻烦
【发布时间】:2016-04-20 17:34:01
【问题描述】:

我正在尝试使用无论何时 gem 创建一个 cronjob。

every 1.day, :at => "12:00pm" do
    grep_part_of_command = '"@timestamp":"'+Date.today.to_s
    command "cat logstash_development.log | grep '#{grep_part_of_command}' > todays_logstash_development.log"
end

我想要达到的目标:

* * * * * /bin/bash -l -c 'cat logstash_development.log | grep '"@timestamp":"2016-04-20' > todays_logstash_development.log'

但是当我打开我的 crontab 时,我得到的是:

* * * * * /bin/bash -l -c 'cat logstash_development.log | grep '\''"@timestamp":"2016-04-20'\'' > todays_logstash_development.log'

注意 grep 匹配器字符串周围的额外 '\'

谁能帮我找出我的错误。

【问题讨论】:

    标签: ruby-on-rails string bash escaping


    【解决方案1】:

    这似乎是正确的!无论何时在任何地方都使用单引号,以便在 shell 中不会解释像 ! 这样的特殊符号。 '\'' 是一种在单引号字符串中打印单引号的方法。请尝试以下操作:

    echo 'grep '\''"@timestamp":"2016-04-20'\'' > '
    

    它会输出:

    grep '"@timestamp":"2016-04-20' >
    

    所以,别担心!输出文本是正确的。

    【讨论】:

    • 当我直接在终端上执行时,实际上上面的命令最终会在我的终端上显示一个直角。您可以尝试使用一些虚拟文件。
    • Imposibru!输出为correct。这就是 bash 解释它的方式。我试图在第一段中解释。以防万一,您仍然对在 bash 编程中研究单引号或看到完全相同的whenever issue 有疑问。
    • 从上面的命令我的意思是cat logstash_development.log | grep '\''"@timestamp":"2016-04-20'\'' > todays_logstash_development.log
    • 正如我所说,'\'' 是一种在单引号字符串中转义单引号的方法。这意味着字符串必须用' 引用。示例:echo 'logstash_development.log | grep '\''"@timestamp":"2016-04-20'\'' > todays_logstash_development.log'。这是result。另外,不要使用cat,使用echocat 期待一个文件,而不是一个字符串。
    • 好吧,稍微练习一下,你说的现在更有意义了。非常感谢
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2021-12-22
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多