@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
)
  • Вопрос задан
  • 4041 просмотр
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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