質問: pb.start(); }catch(Exception e){ e.printStackTrace(); } } } ■エラー内容 java.io.IOException: Cannot run program "ls -l": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042) at Test.main(Test.java:7) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:185) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023) ... 1 more
回答: `ProcessBuilder#command`のAPIみると引数は`string...args`なので、 `pb.command("ls", "-l");` としないといけないのでは?JDKはコマンドを実行するときMac(Linix)であればexecシステムコールを呼び出すのだろうからexecutableのファイル名と引数を分けて指定しないといけませんがJDKはシェルなどのスタイルを気にしたくないので呼び出すコード側で「プログラム」「引数1」「引数2」・・・を分けてねという心だと思います。OSのexecが引数を分割済みのものとして要求するのも同じ心だと思います。 JDKやシステムコールが勝手に空白文字で引数をわけるようなことをすると"echo ' '"と指定したらecho にアポストロフィー2つを引数に渡すなんてことになりかねないのでそれでは困るという感じです。