1

我正在使用 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一起工作?它是否以不同的方式创建命令?

4

2 回答 2

1

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

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

你需要说:

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

或者,您可以说:

/bin/sh /somepath/script.ksh argument
于 2013-07-29T04:40:49.997 回答
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的所有建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用并(继续)构建使用 a 。execProcessProcessBuilder

于 2013-07-29T05:17:55.070 回答