首页 > 解决方案 > 在 c 中使用 popen 执行的 shell 脚本中不可见的环境变量

问题描述

有人可以帮忙吗:

我在 c 程序中使用 popen 执行 shell 脚本。像这样的东西:

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.
}

我的问题是我没有在 EXE_SOMETHING 中获得由 SET_ENV 函数设置的环境变量,因此我找不到 sqlplus 命令。

标签: cbashshellscriptingpopen

解决方案


如果你想用它oraenv来修改当前的 shell 环境,你必须用. oraenv;来调用它。否则环境更改将在子shell中进行。

这在 Oracle 文档中进行了解释。另请参阅 shell.命令的文档,该命令在当前执行上下文中而不是在子 shell 中运行脚本。


推荐阅读