2016-04-26 6 views
2

fooという名前のクラスファイルを含むwhite spaceという名前のフォルダがあるとします。コマンドラインでclasspathに空白があるbashでJavaプログラムをどのように呼び出すのですか?

、私は簡単に

java -cp "white space/" foo 

で次のコマンドにより、fooのプログラムを呼び出すことができますし、それが正常に動作します。

このコマンド全体をBashの変数として設定し、コマンド全体ではなくこの変数を呼び出したいとします。

だから、私は私が$barを実行して、コマンドを呼び出してみましたが、私はというエラーを取得しておく次

bar='java -cp "white space/" foo' 

にコマンドを設定して言うことができます:

Error: Could not find or load main class space 

どのように解決しますこの?

+0

あなたはJavaで希望のようにあなたはbashで文字をエスケープすることはできますか? 'bar =" java -cp \ "white space/\" foo "'のようになります。 –

+0

あなたに失敗した実際のコードを提示するのはどうですか? * '$ bar'をどのように使用しようとしているのかを見ても、本当に答えることはできません。言い換えれば、[mcve]を提示する。 –

+0

'/'は実際にはディレクトリ名の一部ではないので注意してください。それを省略する方が良いでしょう。 –

答えて

2

のように、コマンドライン全体を格納する変数を使用しないでください。では空白を使用できないためです。配列を使用して、オプションを保持し、コマンドを個別に指定することをお勧めします。

options=(-cp "white space/" foo) 
java "${options[@]}" 

または、関数を定義する:入力コマンドを解析し、パラメータを使用して外部プログラムを起動することはbashによって行わ二つの異なる段階であり、第1工程の一部ので

bar() { 
    java -cp "white space/" foo 
} 
1

ものが異なって解釈されていますここに落ちている。

解決策は以下のとおりです。詳細については

eval "$bar" 

、以下を参照してくださいhttps://stackoverflow.com/a/11065196/1871033

+0

'eval'は貧弱な解決策です。 @ chepnerの答えのように配列や関数を使う。 –

+0

右に追加しました。 – CherryDT

関連する問題