【问题标题】:Escaping Quotes in Chef Bash在 Chef Bash 中转义引号
【发布时间】:2017-08-24 04:42:10
【问题描述】:

我需要在通过厨师食谱创建的 cronjob 中使用引号,但即使我转义了引号,它们也不会出现在创建的 cronjob 中。

bash "Add cron" do
  user root
  group root
  code <<-EOH
      (
        (crontab -l; echo "5 0 * * * /bin/find #{node['user']['dir']}/files/ -type f \\( -name \"*.csv\" -o -name \"*.csv.bad\" -o -name \"*.ctrl\" \\) -mtime +1 -print0 | xargs -0 gzip -f" ) | crontab -
       )     
  EOH
end

只是为了澄清我想要结束的 cron 作业应该包含 -name "*.csv"

但我实际得到的是-name *.csv

【问题讨论】:

  • 有什么理由不使用crontab 资源吗?
  • 我正在编辑其他人创建的食谱,他们就是这样做的。我确实考虑过使用它,但我认为我应该能够在这里做我想做的事情。
  • 单引号回显参数并保留双引号。这根本就是一个 bash 问题。但实际上,这很脆弱,而且在已经有资源为您妥善处理的情况下几乎没有意义。

标签: ruby bash chef-infra crontab double-quotes


【解决方案1】:
bash "Add cron" do
  user "root"
  group "root"
  code <<-EOH
      (
        (crontab -l; echo -e '5 0 * * * /bin/find /home/root/files/ -type f \\( -name \"*.csv\" -o -name \"*.csv.bad\" -o -name \"*.ctrl\" \\) -mtime +1 -print0 | xargs -0 gzip -f'
       )
  EOH
end

这里使用单引号而不是双引号。

【讨论】:

  • 我的错,我已经编辑了代码以试图简化案例,我删除了其中已经使用单引号的部分,我再次编辑了示例。
  • 我想我可以将属性声明引号换成双打
  • 你的意思是用“”中的引号交换引用作为''?,如果这是你的要求,那么是的,当需要做字符串时更特别地使用双引号属性声明中的插值。
猜你喜欢
  • 2016-07-08
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多