ruby_block厨师资源中无法逃脱美元符号

时间:2019-02-06 10:24:11

标签: ruby chef ruby-block

我正在写一个运行sql命令的厨师食谱。

ruby_block 'SQL command' do
  block do
    report = open(ReportFile,'a')
    command = %Q( ssh -o StrictHostKeyChecking=no root@#{dbHost2} 'su - #{oraSidUser} -c "#{oracleHome}/bin/sqlplus / as sysdba <<EOF
SELECT FLASHBACK_ON FROM V$DATABASE;
EOF"' )
    commandObj = Mixlib::ShellOut.new(command, :timeout => 60)
    commandObj.run_command()
    report.puts("Command:#{command}\nOutput:#{commandObj.stdout}\nError:#{commandObj.stderr}\nExit code:#{commandObj.exitstatus}")
  end
end

但是当我检查日志时,它不运行SQL命令。它运行,

SQL> SELECT FLASHBACK_ON FROM V
                         *
ERROR at line 1:
ORA-00942: table or view does not exist

似乎正在尝试放入$ DATABASE的值。我已经尝试使用反斜杠来转义$。我用了双美元符号。我试过将SQL放在变量中,但是它仍然无法运行正确的SQL。有没有其他方法可以逃脱美元符号?

编辑: 如果使用双反斜杠或三反斜杠,则失败,

Error:DATABASE: Undefined variable.

1 个答案:

答案 0 :(得分:0)

由于command是bash命令,因此需要转义$符号,该符号在shell中作为变量进行评估。

$之前加上双反斜杠,即\\$