1

Javaプログラムからシェルスクリプトを実行しています。Runtime クラスを使用して実装しました。以下は私が実装したコードです

final StringBuilder sb = new StringBuilder("test.sh");
sb.append("/path to/my/text file");

final Process p = Runtime.getRuntime().exec(sb.toString());

ここで sb は、パラメーターを追加して exec メソッドで使用する文字列バッファー オブジェクトです。しかし、問題は、「/path to/my/text file」を渡すパラメーターが4つのパラメーターと見なされることです

/path
 to
/my/text
 file

ただし、シェルで test.sh "/path to/my/text file" として実行すると、単一のパラメーターとして取得されます。Javaコードを使用して同じことを達成するにはどうすればよいですか。スペースを含むこのパスを単一の引数と見なす必要があります。どうぞよろしくお願いいたします。

4

4 に答える 4

5

を使用ProcessBuilderして、あなたの生活を楽にするために設計されています

ProcessBuilder pb = new ProcessBuilder("test.sh", "/path", "/my/text file");
Process p = pb.start();
于 2012-10-10T05:25:43.320 に答える
0

シェルで実行するコマンドを手動で再作成するtest.sh "/path to/my/text file"には、引用符を含める必要があります。

final StringBuilder sb = new StringBuilder("test.sh");
sb.append(" \"/path to/my/text file\""); //notice escaped quotes
final Process p = Runtime.getRuntime().exec(sb.toString());
于 2012-10-10T05:16:56.923 に答える
0

あなたのアプローチは正しいです、あなたはただ前のパラメータを追加して、パラメータの文字space (" ")をエスケープする必要があります"/" and " "

于 2012-10-10T05:18:28.807 に答える
0

これを使って:

final StringBuilder sb = new StringBuilder("test.sh");
sb.append(" \"/path to/my/text file\"");
于 2012-10-10T05:15:58.687 に答える