Ruby字符串单引号导致麻烦

时间:2016-04-20 17:34:01

标签: ruby-on-rails string bash escaping

我正在尝试使用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 matcher字符串周围的额外'\'

任何人都可以帮我找到我的错误。

1 个答案:

答案 0 :(得分:1)

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

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

将输出:

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

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