关于sh文件执行的恍然大悟

  最近在做Hadoop的工作,其中一个sh脚本需要export JAVA_HOME,可是都不成功,后来终于获得真知,现总结如下:

  假设你的脚本文件名字为 export.sh

  source export.sh 相当于运行. export.sh,点号表示读取文件中的命令在当前进程执行。

  如果你直接执行export.sh 或者运行 bash export.sh, 就相当于重新开启一个子进程, 子进程中设定的环境变量不会影响到父进程(export.sh退出的时候你设置的变量就销毁了), 相当于程序中方法/函数里面的局部变量不会作用到主程序(局部变量的作用域问题)。

  解决的方法是用source或者.来执行文件, 或者把你要运行的export命令放到/etc/profile 或者~/.profile (其他地方如~/.bash_rc应当也可以) 中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注