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

问题描述

在我的Spring-boot应用程序中,我试图触发一个Shell脚本,该脚本随后又在内部执行其他几个Shell脚本。在master.sh中调用的不会运行。实际上什么也没发生。

在高级别上,我正在尝试在master.sh中执行以下操作-

  • 检查某些情况
  • 执行另一个shell脚本,该脚本永远不会执行,因此不会再执行任何语句。
  • 让curl调用我的spring-boot应用程序 .....

请帮助...

解决方法

我曾经苦苦挣扎的用例的快速回顾-在我的spring-boot应用程序中,用户可以选择触发一个主脚本(例如master.sh)-该主脚本在内部执行以下操作-

(a)。执行另一个脚本,该脚本存在于系统的其他位置::该脚本可能需要30分钟到3个小时以上的时间执行。

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

步骤a和b在master.sh中多次执行

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

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...