Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA#u HOME isn';在关闭终端实例后,设置/保存到path变量_Java_Bash_Macos_Terminal_Environment Variables - Fatal编程技术网

JAVA#u HOME isn';在关闭终端实例后,设置/保存到path变量

JAVA#u HOME isn';在关闭终端实例后,设置/保存到path变量,java,bash,macos,terminal,environment-variables,Java,Bash,Macos,Terminal,Environment Variables,直到最近,我一直在使用Java1.7作为我的代码库,最近我们已经升级到Java8。 当我试图将.bash\u profile/.bashrc文件中的JAVA\u HOME变量设置为: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH 保存并使用source.bash_概要文件,java版本指向: Nitin-Vegi

直到最近,我一直在使用Java1.7作为我的代码库,最近我们已经升级到Java8。 当我试图将.bash\u profile/.bashrc文件中的JAVA\u HOME变量设置为:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
保存并使用source.bash_概要文件,java版本指向:

Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
但是当我退出终端/关闭会话并重新检查java版本时,它指向旧版本,如下所示:

Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
你能帮我永久地设置JAVA_主路径吗?这样我就不需要每次登录终端时都运行source.bash_配置文件来将JAVA版本从1.7更改为1.8

还有谁能帮我理解一下:

  • .bash_配置文件和.bashrc文件之间的差异
  • 当我在系统首选项中检查Java运行时版本时,它被指向1.8
  • ,但当我在终端中检查java版本时,它显示为:

    java version "1.7.0_79"
    
  • $JAVA_HOMEJAVA命令在哪里有什么区别
  • 关闭终端实例后,未将JAVA_HOME设置/保存到path变量

    这是正确的。在普通shell中,当shell退出时,对shell中的环境变量所做的更改将丢失。(这适用于Linux、UNIX、Mac OS甚至Windows“cmd.exe”。)

    在Linux、UNIX和(我猜)Mac OS上处理这个问题的通常方法是将shell命令放入shell的一个“rc”文件中,或者放入运行Java应用程序(或其他)所用的包装器脚本中


    你能帮我永久地设置JAVA_主路径吗?这样我就不需要每次登录终端时都运行source.bash_配置文件来将JAVA版本从1.7更改为1.8

    在UNIX/Linux上,一种可能是将全局设置放入
    /etc/profile
    。然而,我不知道这是否适用于MacOS。在您的情况下,可能是您将设置放在了错误的文件中,或者是您将错误的设置放在了正确的文件中

    但这是“ManBash”关于shell初始化(在我的Linux系统上)的说法:

    当bash作为交互式登录shell调用时,或者作为带有
    --login
    选项的非交互式shell调用时,它首先读取并执行文件
    /etc/profile
    中的命令(如果该文件存在)。读取该文件后,它将按顺序查找
    ~/.bash\u profile
    ~/.bash\u login
    ~/.profile
    ,并从第一个存在且可读的文件读取和执行命令

    当启动非登录shell的交互式shell时,bash从
    ~/.bashrc
    读取并执行命令(如果该文件存在)。这可以通过使用
    --norc
    选项来禁止。
    --rcfile
    file选项将强制bash从文件中读取和执行命令,而不是
    ~/.bashrc


    还有人能帮我理解一下:1).bash_文件和.bashrc文件之间的区别

    见上文


    2) 当我在系统首选项中检查Java运行时版本时,它被指向1.8,但当我运行

    $ java -version
    
    我得到这个输出:

    java version "1.7.0_79"
    
    我猜您的shell初始化文件将覆盖您在系统首选项中设置的内容。此外,我怀疑您可能误解了shell如何查找命令。正如“manbash”所解释的,shell实际上将使用
    $PATH
    变量搜索命令。这就是您应该检查的变量,以找出
    java-version
    whereis-java
    的行为不符合预期的原因

    您可以通过键入来检查shell中的实际环境变量设置

    $ export
    

    3)
    $JAVA_HOME
    JAVA
    命令在哪里有什么区别

    第一个是环境变量。。。这不是命令搜索路径。第三方工具通常使用它来定位JDK/JRE。但是JDK/JRE工具本身忽略了它

    第二个是一个内置命令,它尝试在shell的实际命令搜索路径上查找命令

    关闭终端实例后,未将JAVA_HOME设置/保存到path变量


    这是不对的。保存后,它会立即保存到PATH变量中。但是,它不影响当前打开的终端窗口,只影响新窗口。关闭终端窗口与此无关。

    您使用的是哪个版本的Mac OS X?Mac OS Sierra版本10.12.2(两天前刚刚升级)。即使我关闭并打开了一个新的终端实例,它也不会保存。