1

ProcessBuilder を使用して、Java プログラムからシェル スクリプト (スクリプトの先頭にシバンを含む ksh) を実行しています。

processBuilder.command("/bin/sh","-c"," . " + /somepath/script.ksh + " " + argument);
proc = processBuilder.start();

私のJavaプログラムを使用すると、すべて正常に動作します。コマンドラインでコマンドを実行したかったのですが、Javaプログラムから実行されているコマンドは次のとおりであることがわかりました。

/bin/sh -c . /somepath/script.ksh argument

ただし、コマンドラインでは機能せず、次のエラーが表示されます。

/somepath/script.ksh: line 0: .: filename argument required
.: usage: . filename [arguments]

「-c」フラグは、次の項目がコマンド(私のステートメントではソース演算子「.」)であることを期待しているように見え、その後、さらに引数が必要です。したがって、私のスクリプト (/somepath/script.ksh) は、コマンドではなく引数として使用されます。Java プログラムの processbuilder で動作するのはなぜですか? コマンドを別の方法で作成していますか?

4

2 に答える 2

0

変化する:

processBuilder.command("/bin/sh","-c"," . " + /somepath/script.ksh + " " + argument);

processBuilder.command("/bin/sh","-c","./somepath/script.ksh", argument);

のすべての部分をString[]別々の として与えますString

さらなるヒント

When Runtime.exec() will notのすべての推奨事項を読んで (そして実装して) ください。それは問題を解決するかもしれません。そうでない場合は、失敗した理由に関する詳細情報を提供する必要があります。次に、それが参照していることを無視し、(引き続き) を使用して をビルドします。execProcessProcessBuilder

于 2013-07-29T05:17:55.070 に答える