当前位置: 技术问答>linux和unix
环境变量声明的问题
来源: 互联网 发布时间:2016-10-02
本文导语: 在arm或Linux的PC机上,写了一个Shell脚本,执行了之后环境变量声明不成功。 但直接在命令行输入Shell里面的内容,环境变量可以声明成功。为什么? Shell如下: #!/bin/bash export QTDIR=/mnt/yaffs/Qtopia echo hello 给这个脚本...
在arm或Linux的PC机上,写了一个Shell脚本,执行了之后环境变量声明不成功。
但直接在命令行输入Shell里面的内容,环境变量可以声明成功。为什么?
Shell如下:
#!/bin/bash
export QTDIR=/mnt/yaffs/Qtopia
echo hello
给这个脚本赋权限后执行,hello显示出来了,但env里面没有QTDIR。
如果直接在命令行里输入:
export QTDIR=/mnt/yaffs/Qtopia
env里就有QTDIR=/mnt/yaffs/Qtopia了。
这是什么问题呢?
但直接在命令行输入Shell里面的内容,环境变量可以声明成功。为什么?
Shell如下:
#!/bin/bash
export QTDIR=/mnt/yaffs/Qtopia
echo hello
给这个脚本赋权限后执行,hello显示出来了,但env里面没有QTDIR。
如果直接在命令行里输入:
export QTDIR=/mnt/yaffs/Qtopia
env里就有QTDIR=/mnt/yaffs/Qtopia了。
这是什么问题呢?
|
因为你执行这个脚本的时候 shell会fork一个新的子进程 你在脚本里设置的环境变量 只在这个新的进程里有小 脚本结束了 那些变量也就和进程一起灰飞烟灭了啊
所以你需要使用source或者.这样的BASH内建命令来让环境变量生效 这样不会fork子进程
source your-script
或者
. your-script
所以你需要使用source或者.这样的BASH内建命令来让环境变量生效 这样不会fork子进程
source your-script
或者
. your-script
|
用dot命令执行你的脚步
. ur-script
. ur-script
|
我们把当前的shell当成父进程bash 你新启动的init.sh就是子进程
你即使在init.sh里执行. example.sh 那么example.sh里设置的
环境变量也只是在init.sh里有有效
子进程可以继承父进程的环境变量 但是反过来不行!
你即使在init.sh里执行. example.sh 那么example.sh里设置的
环境变量也只是在init.sh里有有效
子进程可以继承父进程的环境变量 但是反过来不行!