JAVA_HOME
我正在我的文件中设置我的~/.bashrc
。
现在,我需要创建一个脚本来改变JAVA_HOME
当前终端,以便我可以启动需要 java 5 的应用程序。
我已经创建了这个脚本来执行此任务,但完成后,我发现 JAVA_HOME 没有更新
export JAVA_HOME=/usr/lib/jvm/java-5-oracle/
export PATH=$PATH:$JAVA_HOME
结果如下
$ ./javaHome5.sh
$ echo $JAVA_HOME
/usr/lib/jvm/java-6-oracle/
我认为这个没有被应用的原因是脚本正在它自己的终端中执行,所以当脚本结束时,当前终端不会受到影响。
目前,我发现解决此问题的唯一方法是:
- 编辑我的
~/.bashrc
并更改JAVA_HOME变量 - 运行
source ~/.bashrc
以在当前终端中应用更改。同样,这不能在脚本中应用,因为命令source
需要在当前窗口中运行。
不用说,这个更改适用于所有新的终端窗口,所以我实际上需要执行两次:一次是在启动我的应用程序之前,另一次是在启动应用程序之后,只是为了将环境变量恢复为默认值。这真的不太方便。
您是否知道如何使用脚本来改变这个变量?
答案1
这是不可能的。正如您正确观察到的那样,您的脚本正在其自己的 shell 中执行。此 shell 在分叉时会获取其父 shell 环境的副本,并且无法访问父 shell 的环境。这很好,因为否则脚本可能会产生各种无法预料的副作用。;)
为了更改当前 shell 中的变量,您可以始终执行脚本文件(而不是将其作为独立进程执行),这样脚本将由当前 shell 执行,而不是分叉的 shell。如果您的脚本名为myscript.sh
,请将其命名为 ,source myscript.sh
而不是./myscript.sh
。