将变量导出到另一个bash脚本

时间:2014-09-05 21:53:10

标签: linux bash shell sh

我有一个bash脚本ex.sh,它调用另一个脚本path.sh

sh path.sh

我在path.sh中有一个变量,我想在ex.sh中使用

我试过

export var

然后使用

在ex.sh中调用它
echo 'export HOME=${var}' >> /etc/profile.d/user_env.sh

这不起作用,非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

export识别其子壳的变量或函数 相反,在ex.sh内部, source 如下所示的path.sh脚本 - >

. ./path.sh

或者像这样 - >

source ./path.sh

这样,当前脚本中可以使用path.sh的所有声明变量和函数(在本例中为ex.sh)

如果path.sh除了声明变量和函数之外还做了更多的工作,那么在path.sh和ex.sh中都有一个单独的第三个脚本set_var.sh和source

答案 1 :(得分:2)

父进程无法从子进程变量。您应该在进程之间使用某种形式的通信来交换数据。您可以使用:

  • 文件
    • 孩子将信息写入文件,例如:newvar=someval
    • 当孩子退出时,父文件source并获取newvar变量

  • 命名管道
    • 父母创建一个fifo
    • 在后台运行孩子并开始从管道读取
    • 孩子将信息写入管道
    • 父母读了......

演示:

档案:parent.sh

commfile="./.ex.$$"
echo "the newvar before child: =$newvar="
bash child.sh "$commfile"
source "$commfile"
echo "the newvar after source: =$newvar="
rm -f "$commfile"

档案:child.sh

commfile="$1"
#do something
sleep 2
echo "newvar='some value'" >"$commfile"

运行parent.sh打印:

the newvar before child: ==
the newvar after source: =some value=