父子shell脚本问题

时间:2009-12-10 12:06:07

标签: shell variables scope

我有两个脚本parent.sh和child.sh。 parent.sh中有一个变量,需要子进程访问。我通过在父脚本中导出变量来实现这一点,并且变量可用于子进程?

孩子有没有办法修改父shell中定义的导出变量的值?

Parent.sh

#!/bin/bash
export g_var=2
./child.sh

child.sh

#!/bin/bash
g_var=`expr $g_var + 1 `   #This modification is available in child shell only.

3 个答案:

答案 0 :(得分:5)

大多数shell支持source内置函数,它在当前shell中执行脚本而不是生成新脚本。在bash和其他几个方面,command .相当于source。我还没看过,但POSIX shell标准可能要求两者相同。尝试:

#!/bin/bash
export g_var=2
. ./child.sh

“child.sh”与您的示例相同。

答案 1 :(得分:0)

否(假设您的意思是需要将返回的更改传递给父母)。你必须以任何方式实现某种形式的IPC(进程间通信)来传达这种变化。

(一种简单的方法是让孩子写出一个包含更改的小shell脚本,并让父进程在子进程退出时使用该脚本。)

答案 2 :(得分:-1)

在子文件中使用以下命令 - 这会将所有变量导出到临时文件env_file printenv | sed's / ^ / export /; s / = / = \“/; s / $ / \”/'> env_file

然后在父文件中调用子文件后使用下面的命令

./ child.sh 。 env_file