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 で動作するのはなぜですか? コマンドを別の方法で作成していますか?