0

我正在编写一个运行 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.
4

1 回答 1

0

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

在 之前附加双反斜杠$,即\\$

于 2019-02-06T13:20:49.760 回答