如何解决如何在Java中执行Shell脚本
我必须在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/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机器上正确执行,还是需要对代码进行更多更改?
解决方法
看看这个Runtime.getRunTime()。exec
,您应该能够使用Runtime.exec()
或ProcessBuilder
来调用Shell来运行脚本,但是整个过程充满了陷阱。
我建议阅读这篇文章:
https://www.infoworld.com/article/2071275/when-runtime-exec---won-t.html
解释了许多陷阱,以及如何避免它们。特别是在Linux上,几乎可以肯定需要从shell调用中使用stdout和stderr,即使脚本不产生任何输出,有时也是如此。您还需要注意如何在脚本参数中处理空格和特殊字符(如果有)。 Java用于命令行的解析器盲目地在空白处中断了命令行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。