繁体   English   中英

如何在ksh脚本中为子进程导出环境变量?

[英]How to export an environment variable for children processes inside a ksh script?

我正在使用旧的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终端中。

为什么? 是否可以在脚本内进行导出而不是手动进行导出?

一切都很好...

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

因此,确实环境变量从未从我的C程序传播到另一个孩子。 唯一在子级中设置该变量的时间是在导出变量的外壳中执行另一个程序(该子级的真正父级)时。

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

VARIABLE=value my_c_program

导出仅用于程序的变量。 之后,将设置该变量,但其他外部进程将无法获得副本。

那么为什么您的脚本不起作用? 很难说,但是这里有一些调试问题的技巧:

  1. 使用#!/bin/ksh -x启用调试输出。 将输出保存在文件中,然后grep VARIABLE以查看其发生的情况。

  2. 检查拼写错误。

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

     #!/bin/ksh echo $VARIABLE 

    并调用它而不是my_c_program只是为了确保在工作中传递变量。

  4. 也许C做了一些意外的事情。 使用调试器来确保它能够达到您的期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM