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

@BMargulies Answer が解決策を提供しました。しかし、あなたがしたことがなぜ間違っていたのかを理解することは重要だと思います...そうすれば、次回は(少なくとも)それを正しくするためにより良い刺し傷をすることができます.

最初のコマンドラインを見て...

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

それには多くの問題があります。まず、シェル変数を設定するための構文は次のとおりです。

<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'

3 種類の引用はすべて同じ効果があります。「=」の後のものが単一の として解析され<word>ます。(3 つの引用スタイルには動作の違いがありますが、ここでは問題ではありません。)

2 行目は実際に必要なものに近いものです。あなたが書いた:

 export JAVA_HOME=myjava

JAVA_HOME をリテラル文字列 "myjava" に設定し、エクスポートすることを意味します。しかし、「myjava」という名前のシェル変数の値を使用したいとします。あれは:

 export JAVA_HOME=$myjava

「$myjava」は、「変数 'myjava' の値を補間する」と言っています ... 上記を参照してください。


@BMargulies の回答では、2 つの行を on に結合し、(不要な) ローカル変数 "myjava" を削除しています。それは私もそれをしただろう方法です。

于 2013-04-25T00:18:01.640 に答える
1

2 つのエラー: 1 つ目は、奇妙に設定されたワンショット変数で " " を実行しようとしていますc/program files (x86)/java/jre7。2 つ目は、bourne-shell セマンティクスを使用しているようです。最初に変数を設定する必要があります。

$myjava=cat c/program\ files\ (x86)/java/jre7、「myjava」という名前の変数を取得し、値を抽出し(待ってください、その変数は存在しませんか?まあ、値は空の文字列になります...)、その値を変数の名前として使用し、設定しますその変数が値「cat」を持つようにします。これをシェル環境で実際に設定しないでください。「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 に答える