1

我的主机系统是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: No such file or directory 错误:未设置 JAVA_HOME。

我究竟做错了什么?

4

3 回答 3

3
export JAVA_HOME=c:/program\ files\ \(x86\)/java/jre7
于 2013-04-24T23:37:21.740 回答
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: No such file or directory”的原因。

该行export JAVA_HOME=myjava,在 bash 中我会说这意味着创建/设置一个名为 的变量JAVA_HOME,将其设置为字符串“myjava”,并将其标记为导出的变量。错误消息“错误:未设置 JAVA_HOME。” 要么意味着你需要分解它(不使用 bash?),JAVA_HOME=$myjava; export JAVA_HOME要么意味着 JAVA_HOME 没有设置为任何有意义的东西,如果你修复第一行,一切都会变得更好。

于 2013-04-24T23:48:50.440 回答
1

@BMargulies Answer 提供了一个解决方案。但我认为理解你做错的原因是相关的......这样下次你可以(至少)更好地尝试让它正确。

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

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

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

<name>=<word>

所以你在第一行实际上要做的事情如下:

  1. 它正在为字符串“cat”设置一个变量名未知的变量:

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

最重要的是,您似乎正在尝试使用“cat”命令来做某事。“cat”命令(以这种形式)读取文件的内容并将其写入标准输出。

  1. 你没有文件。您正在查看一个目录。
  2. 您不关心目录的内容。(这不是您访问它的方式......)
  3. 你不是在看标准输出。

简而言之,这里完全不需要“猫”。您只需要目录的路径名。所以第一行的正确形式是:

 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”。我也是这样做的。

于 2013-04-25T00:18:01.640 回答