0

我正在开发一个旧C软件。有一个ksh脚本执行一个C程序,然后创建一些其他进程并结束。这些过程仍然存在。

我正在尝试在我的ksh脚本中设置一个环境变量,以便可以在新创建的仍然存在的进程中访问它。

我试过这种方式:

#!/bin/ksh

VARIABLE=value
export VARIABLE

my_c_program

但这不起作用......我试图:

  1. 将我的 ksh 脚本更改为 bash
  2. 创建一个包装脚本来创建和导出变量,然后执行原始的 ksh 脚本(它只是执行 C 程序)
  3. 采购我的 ksh 脚本(或尝试使用 2 时的包装脚本)而不是执行它

但没有任何效果。

现在唯一有效的是当我明确地手动执行命令时:

export VARIABLE

在当前的 bash 终端中。

为什么?难道不能在脚本中进行导出而不是手动进行吗?

4

2 回答 2

1

其实一切都好...

事实是,我认为是在我的 ksh 脚本中执行的 C 程序的子进程是之前执行的另一个进程的子进程。C 程序只是通过共享内存发送一条消息,告诉其他程序执行它的子程序。

因此,确实环境变量从未从我的 C 程序传递给其他人的孩子。我在子项中设置该变量的唯一时间是当我在导出变量的 shell 中执行另一个程序(即子项的真正父项)时。

于 2013-08-22T13:52:53.053 回答
0

上面的代码看起来是正确的,它应该可以工作。另一种方法是:

VARIABLE=value my_c_program

它只为程序导出变量。之后,将设置变量,但其他外部进程不会得到副本。

那么为什么你的脚本不起作用?很难说,但这里有一些调试问题的提示:

  1. 用于#!/bin/ksh -x启用调试输出。将输出保存在一个文件中,然后grep VARIABLE看看它会发生什么。

  2. 检查错别字。

  3. 另一个 shell 脚本就像一个外部进程。所以创建一个脚本

    #!/bin/ksh
    
    echo $VARIABLE
    

    并调用它,而不是my_c_program仅仅为了确保传递变量有效。

  4. 也许C做了一些意想不到的事情。使用调试器确保它符合您的预期。

于 2013-08-21T08:58:54.173 回答