yan*_*Lar 2 bash scripts environment-variables
我正在JAVA_HOME
我的~/.bashrc
文件中设置我的。
现在,我需要创建一个脚本来更改JAVA_HOME
当前终端的 ,以便我可以启动需要 java 5 的应用程序。
我已经创建了这个脚本来完成这个任务,但是完成后,我可以看到 JAVA_HOME 没有更新
export JAVA_HOME=/usr/lib/jvm/java-5-oracle/
export PATH=$PATH:$JAVA_HOME
Run Code Online (Sandbox Code Playgroud)
这是结果
$ ./javaHome5.sh
$ echo $JAVA_HOME
/usr/lib/jvm/java-6-oracle/
Run Code Online (Sandbox Code Playgroud)
我认为没有应用的原因是脚本正在它自己的终端中执行,所以当脚本结束时,当前终端不会受到影响。
目前,我找到的唯一方法是:
~/.bashrc
和更改JAVA_HOME VARsource ~/.bashrc
以应用当前终端中的更改。这又不能在脚本中应用,因为该source
命令需要在当前窗口中运行。毋庸置疑,此更改适用于所有新的终端窗口,因此我实际上需要执行两次此操作:一次在启动我的应用程序之前,另一次是在此之后立即将环境变量恢复为默认值。那真的不太方便。
您有什么想法可以使用脚本更改此 var 吗?
这不可能。正如您正确观察到的,您的脚本正在其自己的 shell 中执行。这个 shell 在 fork 时得到了它的父 shell 环境的副本,并且它无法访问父 shell 的环境。这很好,因为否则脚本可能会产生各种无法预料的副作用。;)
为了更改当前 shell 中的变量,您始终可以获取脚本文件(而不是将其作为独立进程执行),因此脚本由当前 shell 执行,而不是分叉的。如果您的脚本被调用myscript.sh
,请将其称为source myscript.sh
而不是./myscript.sh
。
归档时间: |
|
查看次数: |
7816 次 |
最近记录: |