最终的Processbuilder命令如何?

时间:2013-07-29 04:31:30

标签: java shell ksh processbuilder

我正在使用ProcessBuilder在我的java程序中运行一个shell脚本(脚本顶部是shebang的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一起使用?它以不同的方式创建命令吗?

2 个答案:

答案 0 :(得分:1)

-c的{​​{1}}选项会使/bin/sh将参数解释为命令行。所以不要说:

sh

你需要说:

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

或者,您可以说:

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

答案 1 :(得分:0)

变化:

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

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

所有部分String[]作为单独的String提供。

进一步提示

阅读(并实施)所有 When Runtime.exec() won't的建议。这可能会解决问题。如果没有,它应该提供有关失败原因的更多信息。然后忽略它引用exec和(继续)使用Process构建ProcessBuilder