我有一个bash脚本ex.sh调用另一个脚本path.sh导出变量到另一个bash脚本
sh path.sh
我在path.sh一个变量,我想在ex.sh使用
我试图
export var
,然后使用
echo 'export HOME=${var}' >> /etc/profile.d/user_env.sh
0把它称为在ex.sh
这是行不通的,任何帮助非常感谢
我有一个bash脚本ex.sh调用另一个脚本path.sh导出变量到另一个bash脚本
sh path.sh
我在path.sh一个变量,我想在ex.sh使用
我试图
export var
,然后使用
echo 'export HOME=${var}' >> /etc/profile.d/user_env.sh
0把它称为在ex.sh
这是行不通的,任何帮助非常感谢
export
承认一个变量或函数的子壳。
相反,内ex.sh,源的path.sh脚本像下面 - >
. ./path.sh
或这样的 - >
source ./path.sh
这样一来,所有声明的变量和路径的功能.sh在当前脚本中可用(在这种情况下为ex.sh)
如果path.sh除了声明变量和函数之外还做了一些其他工作,则还有一个单独的第三个脚本set_var.sh和sour在path.sh和ex.sh中都是这样的
如果您希望'path.sh'(子进程)向调用方公开变量,这将是必要的。当所有必要的变量都被导出时 - 也就是说,当* environment *变量来自调用者对其子进程可见时,它不是必需的。 – 2014-09-05 21:59:55
那么他可以使用第三个脚本来定制它,无论他想将它暴露给ex.sh – dganesh2002 2014-09-05 22:01:17
(顺便说一句 - 如果我的回答中的downvote来自你,那么解释为什么以及内容如何不准确的评论将会是理解)。 – 2014-09-05 22:02:16
父进程不能从子进程获取变量。您应该在进程之间使用某种形式的通信来交换数据。您可以使用:
newvar=someval
source
文件并获得newvar
变量或
演示:
文件: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=
如果您希望进行扩展,则不能在此处使用单引号。 – 2014-09-05 21:54:37
@jquerynoob你应该接受最适合你的答案,作为对其他花时间帮助你的人的礼貌。如果您不满意,随时可以在提供的答案上添加注释 – dganesh2002 2014-09-06 01:03:52