Переменные окружения не видны в скрипте оболочки, выполняемом с помощью popen в c - PullRequest
0 голосов
/ 15 мая 2019

Может кто-нибудь помочь в этом:

Я выполняю сценарий оболочки, используя popen в c-программе.Примерно так:

fd = popen("script1", "r");

код script1 выглядит так:

#!/bin/sh
source script2     #loading another script2

EXE_SOMETHING   #Function call from script2

//Do something....

код script2 выглядит так:

#!/bin/sh
function SET_ENV()
{
    oraenv <<-EOF
    SID NAME
    EOF
}

function EXE_SOMETHING()
{
    SET_ENV
    //Executing sql query using sqlplus to get output from database.
}

Моя проблема в том, что я не получаю переменные env в EXE_SOMETHING, которые устанавливаются функцией SET_ENV, из-за чего я получаю команду sqlplus, не найденную.

1 Ответ

0 голосов
/ 15 мая 2019

Если вы хотите использовать oraenv для изменения текущей среды оболочки, вы должны вызвать ее с помощью . oraenv;в противном случае изменения среды будут сделаны в подоболочке.

Это объясняется в документации Oracle.Также см. Документацию для команды shell ., которая запускает сценарий в текущем контексте выполнения, а не в подоболочке.

...