刚入职的同事跑过来说设置的环境变量不生效,让我帮忙看看,我看了下整个过程,简化下是这样的:
[root@ReMind test2]# cat 1.sh
#! /bin/bash
echo $MYENV
[root@ReMind test2]# MYENV=ReMind
[root@ReMind test2]# echo $MYENV
ReMind
[root@ReMind test2]# ./1.sh
发现命令行设置的环境变量,脚本里打印不出来。
我让他在设置环境变量的命令前面加了一个命令,结果就能获取环境变量了:
[root@ReMind test2]# export MYENV=ReMind
[root@ReMind test2]# echo $MYENV
ReMind
[root@ReMind test2]# ./1.sh
ReMind
很多刚接触linux甚至用过很长时间linux的同学都认为设置环境变量加不加命令对脚本运行没什么影响,实际上差别很大:
主要的区别就记住一条就够了:不加命令设置的环境变量只在本shell生效,加上命令设置的环境变量不仅对本shell生效,对其子shell也生效。
比如我们初次登录上linux服务器,立马会获取一个shell环境,我们运行的命令都是在这个环境下执行的,但是当运行脚本或者其他可执行程序时,又会启动一个子shell,这个脚本中的命令都是在该子shell中运行的,所以上面同事的问题就是没有添加命令设置的环境变量只在第一个shell中生效了,但是并没有在脚本运行的子shell中生效,所以获取不到MYENV的值。
下面在测试一个例子,大家再体会下它的区别和用途:
[root@ReMind test2]# cat 1.sh
#! /bin/bash
MYENV=ReMind
./2.sh
[root@ReMind test2]# cat 2.sh
#! /bin/bash
echo $MYENV
[root@ReMind test2]# ./1.sh
[root@ReMind test2]#
然后修改下1.sh脚本,再执行下看看结果:
[root@ReMind test2]# cat 1.sh
#! /bin/bash
export MYENV=ReMind
./2.sh
[root@ReMind test2]# cat 2.sh
#! /bin/bash
echo $MYENV
[root@ReMind test2]# ./1.sh
ReMind
现在大家应该明白的用途了吧!
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666
声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!