我正在使用 ProcessBuilder 从我的 java 程序运行 shell 脚本(ksh,脚本顶部带有 shebang):
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一起使用呢?它创建的命令是否不同?
最佳答案
/bin/sh
的 -c
选项将使 sh
将参数解释为命令行。所以不要说:
/bin/sh -c . /somepath/script.ksh argument
你需要说:
/bin/sh -c ". /somepath/script.ksh argument"
或者,你可以说:
/bin/sh /somepath/script.ksh argument
关于java - 最终的 Processbuilder 命令是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17916082/