我有两个脚本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.
答案 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