从shell命令获得对Java代码的响应

时间:2014-03-04 06:15:32

标签: java api shell unix ubuntu

我正在使用net.neoremind.sshxcute SSH Java API库连接到sftp服务器并执行该服务器上的shell脚本。

我的Shell脚本可以轻松地将文件从SFTP位置移动到其他计算机上的HDFS位置。

目前,由于任何原因(例如连接失败,非法名称文件,空文件等),无法报告是否有任何文件被移动。

我想知道,如何显示每个失败文件的信息集从shell命令转移回Java代码?

这是我的示例代码:

// e.g sftpScriptPath => /abc/xyz
// sftpScriptCommand => sudo ./move.sh
// arguments => set of arguments to shell script.
task = new ExecShellScript(sftpScriptPath, sftpScriptCommand, arguments);
result = m_SshExec.exec(task);
if(result.isSuccess && result.rc == 0)
{
     isSuccessful = true;
     s_logger.info("Shell script executed successfully");
     s_logger.info("Return code : " + result.rc);
     s_logger.info("Sysout : " + result.sysout);
}
else
{
     isSuccessful = false;
     s_logger.info("Shell script execution failed");
     s_logger.info("Return code : " + result.rc);
     s_logger.info("Sysout : " + result.sysout);
}

1 个答案:

答案 0 :(得分:1)

exec方法调用返回的Result对象包括:

  • 退出状态或返回代码(Result.rc),
  • 标准输出(标准输出)(Result.sysout),
  • 标准错误(stderr)(Result.error_msg)和
  • 成功的标志,based on return code and outputResult.isSuccess)。

因此,如果您致力于使用sshxcute框架执行shell脚本的当前方法,那么最简单的方法是让move.sh脚本在移动文件时提供有关任何失败的信息。这可以通过返回代码和标准输出(stdout)和/或标准错误(stderr)消息的组合来完成。然后,您的Java代码将从返回的Result对象中获取此信息。