Задать вопрос
@Zueuk

Как экранировать символ $ и другие символы в bash-скрипте?

Имеется bash-скрипт с sql-запросом к БД Oracle. При выполнении выдаётся ошибка, что верно, так как в запросе есть служебные символы. Как их корректно экранировать?
#!/bin/bash

HOST=db.local
MAILHEADER="Content-Type: text/html; charset=UTF-8; Importance: high X-Priority: 1 (Highest) X-MSMail-Priority: High"
MAILBODY="Хост: <b>$HOST</b><br>
Запрос: <b>пользователи</b><br>
Дата: <b>$(date)</b><br>
<br>"

SQL=`
sqlplus -s system/manager@DB << EOF
set linesize 3800
set pagesize 60
select distinct action from v$session where action like '%FRM%' order by action;
/
EOF
`
SQLOUTPUT="<pre>$SQL</pre>"
echo "$MAILBODY $SQLOUTPUT" | mail -s "$(hostname)" -a "$MAILHEADER" admin@mail.local

PS На правильный вопрос: зачем так, если проще сделать вызов sql-запроса из отдельного файла? Отвечу - чтобы не плодить кучу файлов и вызов происходил из одного места.

Уточнение.
Основной момент в этой части скрипта. v$session не является переменной bash-скрипта, а является служебной таблицей БД.
SQL=`
sqlplus -s system/manager@DB << EOF
set linesize 3800
set pagesize 60
select distinct action from v$session where action like '%FRM%' order by action;
/
EOF
`


Добавление 2.
Получилось в таком варианте:
SQL=$(
sqlplus -s system/manager@DB << EOF
set linesize 3800
set pagesize 60
select distinct action from v\$session where action like '%FRM%' order by action;
/
EOF
)
  • Вопрос задан
  • 4105 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Инженер по тестированию
    5 месяцев
    Далее
  • Нетология
    Инженер по тестированию
    8 месяцев
    Далее
  • Thinknetica
    Профессиональная разработка на Ruby on Rails
    9 месяцев
    Далее
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы