2013-10-25 2 views
1

Мне нужно установить переменную BASH на основе вывода SQL, которая дает адрес электронной почты. В качестве теста я сделал:Установить переменную BASH на основе вывода SQL

email=$(echo "SELECT email FROM adr" | sqlplus $user/[email protected]$db)

An echo $email шоу:

SQL*Plus: Release 8.1.7.0.0 - Production on Fri Oct 25 10:45:06 2013 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production JServer Release 8.1.7.4.0 - Production SQL> 2 Disconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production JServer Release 8.1.7.4.0 - Production

Так что я думаю, мне нужно какое-то обрезки, чтобы просто получить адрес электронной почты?

Руководство SELECT следующим образом показывает полный вывод:

SQL> SELECT email FROM adr; 

EMAIL 
-------------------------------------------------------------------------------- 
[email protected] 

Что это самый простой способ, чтобы захватить адрес электронной почты?

+0

http://stackoverflow.com/questions/15663763/getting-sqlresult-into-bash-variable-without-oracle-header-footer?rq= 1 – Mat

ответ

2

Использование -s (бесшумный режим). Кроме того, отключить заголовки столбцов и обратной связи, как показано ниже:

email=$(sqlplus -s $user/[email protected]$db << EOF 
set serveroutput on 
set heading off 
set feedback off 
SELECT email FROM adr; 
exit; 
EOF 
) 
+0

Спасибо, но адрес электронной почты, кажется, имеет разделитель строк перед тем, чтобы он нарушил скрипт. Каков наилучший способ решить эту проблему? – user2656114

+0

Используйте 'tr' для удаления разрыва строки. Измените первую строку на: 'email = $ (sqlplus -s/nolog $ user/$ pass @ $ db << EOF | tr -d '\ n'' – dogbane

+0

Спасибо. Могу ли я спросить, для чего« ​​/ NOLOG »? Это вызывает сообщение об ошибке, но при его удалении оно работает так, как ожидалось. – user2656114

Смежные вопросы