java - 最终的 Processbuilder 命令是什么样的?

标签 java shell ksh processbuilder

我正在使用 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/

相关文章:

linux - shell脚本也获取文件的最后一个空行

linux - 如何将 ksh -x 的输出重定向到 unix 中的文件

linux - 这个 ksh 代码是如何工作的?

mysql - 在 Bash 中声明变量?

java - 无法使用 Spring Boot 将日期时间保存到 MongoDB

java - java planner 的外部依赖

java - ARCore – 模型旋转

powershell - powerShell:获取 “Select-Object -Property” bool 状态以在条件中使用

shell - 使用awk计算磁盘空间

JavaFX - 选项卡中的 FXML