Невозможно избежать знака доллара на ресурсе ruby_block - PullRequest
0 голосов
/ 06 февраля 2019

Я пишу рецепт шеф-повара, в котором запускается команда 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 голосов
/ 06 февраля 2019

, поскольку command является командой bash, вам необходимо экранировать знак $, который оценивается в оболочке как переменная.

добавляет двойной обратный слеш перед $, чтоis \\$

...