下面是脚本的路径和脚本所需的所有参数。

"ksh /xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh param1 param2 20200901 459 121"

Below is the code,

String script = "ksh /xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh param1 param2 20200901 459 121";
ProcessBuilder processBuilder = new ProcessBuilder();                       
processBuilder.command(script);
processBuilder.redirectErrorStream(true);
//start() will be in try catch
process = processBuilder.start();
int exitVal = process.waitFor();
if(exitVal == 0){
   //code

我是否需要通过在列表中添加每一个单独的字符串来将脚本作为一个列表来传递? "ksh" , "/xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh" , "param1" "param2" "20200901" "459" "121"

在我的Windows机器上,我按下面的方法打开记事本,它工作得很好。

ProcessBuilder processBuilder = new ProcessBuilder("Notepad.exe", "C:/Dev/Test.txt");
processBuilder.redirectErrorStream(true);
process = processBuilder.start();

脚本会在Linux盒子上正常执行,还是需要对代码进行更多的修改?

5 个评论
"脚本会在Linux盒子上正常执行吗?"首先,它在你的机器上工作吗?
@FedericoklezCulloca - 我在Windows机器上编码,使用下面的方法打开一个记事本进行测试。ProcessBuilder processBuilder = new ProcessBuilder("Notepad.exe", "C:/Dev/Test.txt")。
这是否回答了你的问题?如何从Java代码中运行Unix shell脚本?
@VinodKhade 撇开具体案例不谈,无论如何你真的应该在linux上测试。不要猜测兼容性。另外,不要指望ksh会被安装,它不是我所能想到的任何Linux发行版的标准。
@FedericoklezCulloca - How do we handle for ksh ? Do we need to put all these in a list of String ? Like List<String> will contain "ksh" , "/xyz/abc/data/code_base/RUN_SCRIPTS/dev/my_script.sh" , "param1" "param2" "20200901" "459" "121"
java
linux
shell
ksh
VinodKhade
VinodKhade
发布于 2020-09-04
2 个回答
Kevin Boone
Kevin Boone
发布于 2020-09-04
已采纳
0 人赞同

You should能够使用Runtime.exec()ProcessBuilder来调用shell来运行一个脚本,但整个过程充满了隐患。