我如何在bash中设置JAVA_HOME?

时间:2013-04-24 23:31:04

标签: java linux bash cygwin

我的主机系统是Windows 7

我想在 CYGWIN 中使用它。

我需要将名为 JAVA_HOME 的环境变量设置为c/program files (x86)/java/jre7

这是我试过的:

$myjava=cat c/program\ files\ \(x86\)/java/jre7
export JAVA_HOME=myjava

但我得到了:

  

第9行:c / program files(x86)/ java / jre7:没有这样的文件或目录   错误:未设置JAVA_HOME。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

export JAVA_HOME=c:/program\ files\ \(x86\)/java/jre7

答案 1 :(得分:1)

两个错误:首先,你试图用一个设置很好的一次性变量来执行“c/program files (x86)/java/jre7”,其次,看起来你正在使用bourne-shell语义:首先你必须设置变量,然后你可以导出它。

$myjava=cat c/program\ files\ (x86)/java/jre7取名为“myjava”的变量,提取值(等待,var不存在?好吧,值将是空字符串...),使用该值作为变量的名称,并将变量设置为值“cat”。实际上不要在shell环境中设置它,我们将运行“c / program \ files \(x86)/ java / jre7”并将其设置为该命令环境中的额外变量。这就是为什么你得到“c / program files(x86)/ java / jre7:没有这样的文件或目录”。

export JAVA_HOME=myjava,在bash我会说这意味着创建/设置一个名为JAVA_HOME的变量,将其设置为字符串“myjava”,并将其标记为导出变量< / i>的。错误消息“错误:未设置JAVA_HOME”。或者意味着你需要将其分解(不使用bash?),如JAVA_HOME=$myjava; export JAVA_HOME,或者这意味着JAVA_HOME没有设置到任何有意义的,如果你修复了第一个这一切都会好起来的。

答案 2 :(得分:1)

@BMargulies答案提供了一个解决方案。但我认为理解为什么你所做的是错误的是相关的...所以下次你可以(至少)采取更好的方法来纠正它。

查看您的第一个命令行......

$myjava=cat c/program\ files\ \(x86\)/java/jre7

这有很多问题。首先,设置shell变量的语法是:

<name>=<word>

所以你在第一行中实际做的是:

  1. 它将一个带有一些未知变量名的变量设置为字符串“cat”:

    • 变量名称未知,因为它取决于“myjava”变量的 previous 值。 (话语“$ myjava”说“在这里插入'myjava'变量的值”。)
    • 将变量设置为“cat”的原因是“cat”是“=”之后的第一个单词。
  2. 然后,它尝试运行该行的其余部分(即“c / program \ files \(x86)/ java / jre7”)作为命令。但它不是命令:它是一个目录。这是您看到的“未找到”错误消息的最可能来源。

  3. 最重要的是,您似乎尝试使用“cat”命令。 “cat”命令(以该形式)读取文件的内容并将其写入标准输出。

    1. 您没有档案。您正在查看目录。
    2. 您不关心目录的内容。 (这不是你如何访问它...)
    3. 你不是在考虑标准。
    4. 简而言之,这里完全不需要“猫”。您只需要目录的路径名。所以第一行的正确形式是:

       myjava=c/program\ files\ \(x86\)/java/jre7
      

      或使用引号:

       myjava="c/program files (x86)/java/jre7"
      

       myjava='c/program files (x86)/java/jre7'
      

      这三种引用都具有相同的效果。它们会导致“=”之后的内容被解析为单个<word>。 (3种引用样式之间的行为有所不同,但这里并不重要。)

      第二行实际上接近它所需要的。你写道:

       export JAVA_HOME=myjava
      

      表示将JAVA_HOME设置为文字字符串“myjava”...并将其导出。但是你想使用名为“myjava”的shell变量的值。那就是:

       export JAVA_HOME=$myjava
      

      “$ myjava”表示“插入变量'myjava'的值”......见上文。


      @BMargulies回答将两行合并为on,并取消(不必要的)局部变量“myjava”。这就是我做的方式。