@BMargulies Answer が解決策を提供しました。しかし、あなたがしたことがなぜ間違っていたのかを理解することは重要だと思います...そうすれば、次回は(少なくとも)それを正しくするためにより良い刺し傷をすることができます.
最初のコマンドラインを見て...
$myjava=cat c/program\ files\ \(x86\)/java/jre7
それには多くの問題があります。まず、シェル変数を設定するための構文は次のとおりです。
<name>=<word>
したがって、最初の行で実際に行うことは次のとおりです。
不明な変数名を持つ変数を文字列「cat」に設定しています。
- 「myjava」変数の以前の値に依存するため、変数名は不明です。(「$myjava」という発話は、「'myjava' 変数の値をここで補間する」という意味です。)
- 変数を「cat」に設定する理由は、「cat」が「=」の後の最初の単語だからです。
次に、残りの行 (「c/program\ files\ (x86)/java/jre7」) をコマンドとして実行しようとします。しかし、これはコマンドではありません。ディレクトリです。これが、表示されている「見つかりません」というエラー メッセージの最も可能性の高い原因です。
その上、「cat」コマンドを何かに使用しようとしているようです。「cat」コマンド (その形式) は、ファイルの内容を読み取り、標準出力に書き込みます。
- ファイルがありません。ディレクトリを見ています。
- ディレクトリの内容は気にしません。(そして、それはあなたがそれにアクセスする方法ではありません...)
- あなたは標準出力を見ていません。
つまり、ここでは「猫」はまったく必要ありません。ディレクトリのパス名だけが必要です。したがって、最初の行の正しい形式は次のようになります。
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" を削除しています。それは私もそれをしただろう方法です。