中位生存期:从学习export命令理解到的Shell环境和变量生存期




  执行个脚本时会先开启个子shell环境(不知道执行其它是不是这样)然后将父shell中所有系统环境变量复制过来这个脚本中语句就在子shell中执行(也就是说父shell环境变量在子shell中可以但反过来就不行如果在子shell中定义了环境变量只对该shell或者它子shell有效当该子shell结束时也可以理解为脚本执行完时变量消失)为了证明这请看脚本内容:
  test='value'
  export test
  这样脚本执行完后test实际上是不存在接着看下面:
  test='value'
  export test
  bash
  这里在脚本最后行再开个子shell该shell应该是脚本文件所在shell子shell这个脚本执行完后是可以看到test这个变量现在是处于它子shell中当用exit退出子shell后test变量消失
  如果用source对脚本进行执行时如果不加export就不会在子shell中看到这个变量它还不是个系统环境变量呀如脚本内容是:
  test='value'
  用source执行后在shell下是能看到这个变量但再执行bash开个子shell时test是不会被复制到子shell中执行脚本文件其实也是在个子shell中运行所以我再建另个脚本文件执行时是不会输入任何东西内容如:echo $test所以这点特别注意了明明在提示符下可以用echo $test输出变量值为什么把它放进脚本文件就不行了呢?
  所以得出结论是:1、执行脚本时是在个子shell环境运行脚本执行完后该子shell自动退出;2、个shell中系统环境变量才会被复制到子shell中(用export定义变量);3、个shell中系统环境变量只对该shell或者它子shell有效该shell结束时变量消失(并不能返回到父shell中)3、不用export定义变量只对该shell有效对子shell也是无效
  后来根据版主提示整理了下贴子:为什么个脚本直接执行和用source执行不行呢?这也是我自己碰到个问题manual原文是这样:Read and execute commands from filename in the current shell environment and the exit status of the last command executed from filename.明白了为什么不样了吧?直接执行个脚本文件是在个子shell中运行而source则是在当前shell环境中运行
Tags:  无进展生存期 生存期 密钥生存期 中位生存期

延伸阅读

最新评论

发表评论