ruby - Chef - 在 SQLEOH 中使用 for 循环

标签 ruby linux bash chef-infra chef-recipe

我有一个 bash 资源,它在尝试循环访问某些 ddl 脚本时失败了。没有 for 循环(和文字脚本名称)的相同语法在 Chef 中工作正常,并且它都可以工作,包括终端中的 for 循环:

bash "run_ddl_create_tenants" do
user "#{ENV['CHEFUSER']}"
environment "PATH" => "/usr/lib/oracle/12.1/client64/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/opt/aws/bin:/home/#{ENV['CHEFUSER']}/bin"
code <<-EOH
  for f in $(grep '>' /tmp/diffs/tnntdiff | cut -c 3-); do
    sqlplus "admin/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$(aws rds describe-db-instances --db-instance-identifier #{ENV['CLIENTID']}-#{ENV['CTCENV']} | grep 'Address' | cut -d\\\" -f4))(PORT=#{ENV['DBPORT']}))(CONNECT_DATA=(SID=#{ENV['CLIENTID']}#{ENV['CTCENV']})))" <<-SQLEOH
      @#{ENV['CTC_CONFIGURATION']}/ddl/ddl_create_tenant_$f.sql
      #{ENV['DBPASSWD']}
      exit;
    SQLEOH
  done
  EOH
end

我收到的错误表明 SQLEOH 定界符和意外的文件结尾有问题。

STDERR: /tmp/chef-script20151012-25490-16o11q7: line 7: warning: here-document at line 2 delimited by end-of-file (wanted `SQLEOH')
/tmp/chef-script20151012-25490-16o11q7: line 8: syntax error: unexpected end of file

终端命令与 Chef 解释此资源的方式之间的脱节是什么?

最佳答案

知道了,分隔符前的空格问题。删除 SQLEOH 上的缩进并成功连接

关于ruby - Chef - 在 SQLEOH 中使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087633/

相关文章:

ruby-on-rails - 缺少重定向网址。在 Devise_token_auth 中的忘记密码中

.net - .NET 将如何影响 Python 和 Ruby 应用程序?

linux - 找到 : missing argument to -exec with ssh

linux - 在 while 读取循环 bash 中从第 4 行获取变量

c++ - 以目录作为参数运行 C++ 文件?使用 Bash 代替?

ruby-on-rails - 非 ActiveRecord 模型的机械师

ruby - Rake (Ruby) 在构建结束时捕获错误

linux - Node.js 集群 - 检测工作线程卡住了吗?

linux - 用于查看线程何时处于事件状态的系统 API

git - 如何禁止从命令行设置 git 提交消息?