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

问题描述 投票:0回答:1

我写其中一个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.
ruby chef ruby-block
1个回答
0
投票

由于command是bash命令,则需要躲避$符号,其在所述壳体作为一个变量被评估。

$前追加双反斜线,即\\$

© www.soinside.com 2019 - 2024. All rights reserved.