获取shell命令对Java代码的响应
我正在使用net.neoEmilding.sshxcute SSH Java API库连接到sftp服务器并执行该服务器上的shell脚本 我的Shell脚本完成了一项简单的工作,将文件从SFTP位置移动到其他机器上的HDFS位置 目前,无法报告任何文件是否由于连接失败、文件名非法、文件为空等原因而未移动 我想知道,如何显示每个失败文件的信息集从shell命令移回Java代码 这是我的示例代码:获取shell命令对Java代码的响应,java,api,shell,unix,ubuntu,Java,Api,Shell,Unix,Ubuntu,我正在使用net.neoEmilding.sshxcute SSH Java API库连接到sftp服务器并执行该服务器上的shell脚本 我的Shell脚本完成了一项简单的工作,将文件从SFTP位置移动到其他机器上的HDFS位置 目前,无法报告任何文件是否由于连接失败、文件名非法、文件为空等原因而未移动 我想知道,如何显示每个失败文件的信息集从shell命令移回Java代码 这是我的示例代码: // e.g sftpScriptPath => /abc/xyz // sftpScript
// 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);
}
exec
方法调用返回的对象包括:
- 退出状态或返回代码(
)Result.rc
- 标准输出(标准输出)(
)Result.sysout
- 标准错误(stderr)(
),以及Result.error\u msg
- 成功的指示,(
)Result.issucess
因此,如果您致力于使用框架执行shell脚本的当前方法,那么最简单的方法就是让
move.sh
脚本在移动文件时提供有关任何失败的信息。这可以通过组合返回代码和标准输出(stdout)和/或标准错误(stderr)消息来实现。然后,Java代码将从返回的对象中获取此信息。从shell脚本中,您只能获得指示成功或失败的返回值,但您可以安排脚本将每次失败的原因写入日志文件,当脚本报告失败时,Java代码可以从该日志文件中了解这些原因。