linux—如何在java中执行shell脚本

7rfyedvj  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(366)

我必须在linux中运行java的shell脚本,例如,下面是脚本路径和脚本所需的所有参数。

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

下面是代码,

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//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机器上正确执行,或者需要对代码进行更多的更改??

wi3ka0sx

wi3ka0sx1#

看看这个runtime.getruntime().exec

umuewwlo

umuewwlo2#

你应该可以使用 Runtime.exec() 或者 ProcessBuilder 调用shell来运行脚本,但整个过程充满了陷阱。
我建议读这篇文章:
https://www.infoworld.com/article/2071275/when-runtime-exec---won-t.html
这就解释了许多陷阱,以及如何避免它们。特别是,在linux上,几乎肯定需要从shell调用中使用stdout和stderr——这有时是正确的,即使脚本不产生任何输出。您还需要注意如何处理脚本参数中的空格和特殊字符(如果有的话)。java用于命令行的解析器盲目地在空白处打断命令行。

相关问题