通过 Java 代码在另一个 shell 脚本中执行 shell 脚本

Executing shell scripts within another shell script through Java code

在我的 Spring-boot 应用程序中,我试图触发一个 shell 脚本,该脚本在内部依次执行其他几个 shell scripts.I 我能够触发我的使用 ProcessBuilder 的主脚本(例如 master.sh),但在 master.sh 中调用的任何脚本都不会 运行。事实上,什么也没有发生。

在高层次上,我正在尝试在 master.sh -

中执行以下操作

任何帮助请...

快速回顾我遇到的用例 - 在我的 spring-boot 应用程序中,用户可以选择触发主脚本(比如 master.sh) - 这个主脚本在内部执行以下操作-

(一)。执行系统上其他位置的另一个脚本 :: 此脚本可能需要 30 分钟到 3 个多小时才能执行。

(b)。步骤 (a) 完成后,master.sh(主脚本)运行s curl 命令回调我的 Spring 启动应用程序以执行对数据库的更新。

上面的步骤a和b在master.sh

中执行了多次

解决方案 :至于从 Java 代码触发任何命令,我使用 ProcessBuilder 来实现相同的目的。但是我必须在发出 processBuilder.start() 调用之前添加以下附加语句才能使其工作 -

processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);

以上语句将脚本输出重定向到父进程(在本例中为 Java)的错误和输出流。

目前它对我有用。如果行为发生变化(我没有预料到),那么我将相应地更新此线程。

最后,我想请其他人分享他们的理解,为什么没有上述两个语句我的内部脚本没有 运行。我确实理解“为什么”,但没有找到明确的措辞来解释。谢谢大家