【问题标题】:Get return code and status from bash script into Java file从 bash 脚本获取返回码和状态到 Java 文件
【发布时间】:2026-02-02 11:15:01
【问题描述】:

我在 JavaFX 场景构建器应用程序中工作,有时我的代码流执行如下所示:

从我的 Java 类中调用了一个 bash 脚本 script1 来自MyClass.java

exec(./Script1)

在 script1 另一个名为 script2 的脚本

called ./script2

script2 另一个名为 script3 的脚本

在 脚本3

if [ ! "$upgrade_file_path" = "" ]; then
    echo "BUILD SUCCESS"
    echo "upgrade.cpio.gz : "$upgrade_file_path
    //LINE-1
else
    echo "FAILED TO CREATE upgrade.cpio.gz"
fi

我需要什么:

LINE-1:我可以从这里返回一些退出代码到我的 java 文件 (MyClass.java),我需要显示 BUILD SUCESS 字符串以及 $upgrade_file_path 和退出代码我的 javafx 标签。 或者我可以将此退出代码、路径和状态保存在我的MyClass.java 文件中的字符串中?

更新:

我正在使用外部 jar 连接 SSH。我想要做的是从我的 Windows 机器连接一台 linux 机器,为了实现这一点,我使用了 sshexec.jar https://code.google.com/p/sshxcute/downloads/list

下面的代码负责连接和执行 bash 脚本

        ConnBean cb = new ConnBean(buildServerURL, buildServerUsername,buildServerPassword);
        // Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
        ssh = SSHExec.getInstance(cb);          
        //Connect to server
        ssh.connect();
        CustomTask sampleTask = new ExecCommand("/usr/init/checkout.sh");
        //Execution of main taks
        Result rs = ssh.exec(sampleTask);

【问题讨论】:

  • 您正在使用的项目的页面中有很好的示例:code.google.com/p/sshxcute(3.5 和 3.6)。你看过他们吗?您是否尝试使用那里显示的内容?
  • 是的! rc(如果最后一个命令被执行,结果代码将打印 0),我想要做的是在我的脚本中我写了 exit 5;我想要结果代码中的这个值 5。此处的 rc 不会发生这种情况。

标签: java bash shell javafx


【解决方案1】:

为了从 java 执行 shell 命令,我们需要使用一些库,在您的情况下,您使用的是 SSHExec,在这个 jar 中,您可以拥有从 shell 脚本返回的结果/退出代码。

if [ ! "$upgrade_file_path" = "" ]; then
    echo "BUILD SUCCESS"
    echo "upgrade.cpio.gz : "$upgrade_file_path
    //Here you can just add something like:
    exit 0;
else
    echo "FAILED TO CREATE upgrade.cpio.gz"
    exit 1;
fi

当上面的脚本执行时,会从这里抛出一个退出代码,你可以在你的 java 应用程序中使用这个退出代码,如下所示:

    ConnBean cb = new ConnBean(buildServerURL, buildServerUsername,buildServerPassword);
    // Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
    ssh = SSHExec.getInstance(cb);          
    //Connect to server
    ssh.connect();
    CustomTask sampleTask = new ExecCommand("/usr/init/checkout.sh");
    //Execution of main taks
    Result rs = ssh.exec(sampleTask);
    int exitCode = rs.rc; //rc stands for result code, and this rc will have what shell returned.rc is not a function but a int variable of Result class.
    if(exitCode!=0){
      //Error message
}else 
     //Success message.

【讨论】: