使 java 程序返回调用 shell 脚本的值



Unix masterus!

我有一个Java程序,它将一些参数传递给Servlet。Servlet 将信息输入数据库,并将创建的行的 ID 返回给调用它的 java 程序。Java程序在Unix shell脚本中运行,后来继续调用另一个Java程序Java Program_2(比如)。

我的问题是这样的 - 我需要将我们从 Java 程序获得的 ID 作为参数传递给同一个 shell 脚本中的 Java Program_2。有没有这方面的最佳实践?

到目前为止,我正在处理的事情 -

1)使java程序返回带有System.exit()的退出代码。2 个问题 - 如何在 shell 中的变量中捕获退出代码?这是正确的方法吗?退出代码实际上是用于返回程序的成功参数...

2) 将输出写入文件java Java_Program >opt.txt。如果我这样做,那么如何再次读取 shell 变量中opt.txt的内容?

多谢!

编辑:我应该在实际上之前提到这一点...程序在不同的机器上。我使用脚本ssh到另一台机器。然后运行 Java 程序 2。因此,我不能用管道连接两者。

出于

您所述的原因,我不建议使用退出状态来携带数据。 捕获退出状态取决于您使用的 shell,但在 Bash 中,特殊的 $? 变量包含上次执行的进程的退出状态。

将数据写入标准输出要习惯得多。 在 Bash 中,您可以按如下方式捕获它:

output=$(java Java_Program)

或:

output=`java Java_Program`

(您经常会听到首选第一种语法的论点。

然后,您可以使用以下命令将其提供给下一个流程的 stdin:

echo $output > java Java_Program_2

更简单地说,您可以简单地将流程组合在一起:

java Java_Program | java Java_Program_2

我不确定我是否错过了什么,但在我看来,你可以让第一个程序写入 stdout 并将两个程序管道在一起,不是吗?你甚至不需要shellscript。

在 Java 程序中,使用 System.out.println(id); 打印出 id

在 shell 脚本中,您可以执行 Java 程序并将 id 存储在变量中。例如:

ID=$(java JavaProgram)

现在,使用 id 执行 Java Program_2:

java JavaProgram2 $ID

在 Java Program_2 中,ID 将在 args[0] 中进入您的main方法。

您甚至可以通过一个步骤完成此操作:

java JavaProgram2 $(java JavaProgram)

顺便说一下,如果你在一个名为 opt.txt 的文件中有输出,你可以将其内容读入如下变量中:

CONTENTS=$(cat opt.txt)

我不会选择选项 1,因为您可以使用的退出代码范围非常有限,其中一些具有特殊含义,并且不可移植。

对于选项 2,只需使用 variable="$(command)"

variable="`command`"

(我使用了双引号以防command的输出中有任何空格,但我想这很愚蠢,因为您的参数必须是单个数字!

在您的情况下,您可以使用cat opt.txt作为命令,或者您可以省去中间人并直接调用命令中的第一个 Java 程序(这样您根本不需要 opt.txt 文件)。您甚至可以剪切出变量并在一行中完成所有操作。

所以你捕获了 ssh 命令的输出:

java Prg2 $(ssh host java Prg1))
使用退出代码

不是一个好主意,因为退出代码与 0 不同,通常表示错误。

相关内容

  • 没有找到相关文章

最新更新