遇到问题:
在一个脚本文件中定义一个了变量,然后export变量,脚本退出后,设置的环境变量失效。
分析问题:
执行一个脚本时,会先开启一个子shell环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这个脚本中的语句就 在子shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变量,只对该 shell或者它的子shell有效,当该子shell结束时,也可以理解为脚本执行完时,变量消失。)
总结:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;
2、一个shell中的系统环境变量才会被复制 到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。
3、不用export定义的变量只对该shell有效,对子shell也是无效的。
source与脚本,关于环境变量
为什么一个脚本直接执行和用source执行不一行呢?
manual原文是这样 的:Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.明白了为什么不一样了吧?直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。
export是将自定义变量变成系统环境变量。
source的脚本中的环境变量不必要使用export