Java 错误的JSch Exec输出

Java 错误的JSch Exec输出,java,ssh,jsch,Java,Ssh,Jsch,我需要在远程机器上运行shell脚本。我正在使用JSch连接到远程机器,并使用ChannelExec执行shell脚本。 我需要知道如何知道在执行命令时是否有任何错误 下面是我的代码 ChannelExec channel = (ChannelExec) session.openChannel("exec"); BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()));

我需要在远程机器上运行shell脚本。我正在使用JSch连接到远程机器,并使用
ChannelExec
执行shell脚本。 我需要知道如何知道在执行命令时是否有任何错误

下面是我的代码

ChannelExec channel = (ChannelExec) session.openChannel("exec");

BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()));    
String command = scriptName;
if(parameter != null && !parameter.isEmpty()){
    command += " " + parameter;
}

LOGGER.debug("Command To be Executed: " + command);             

channel.setCommand(command);
channel.connect();

//capture output
String msg;

StringBuffer output = new StringBuffer();
while ((msg = in.readLine()) != null)
{
    //output = output + msg;
    output.append(msg);
}

LOGGER.debug("Output Message = " + output.toString());

LOGGER.debug("ERROR STATUS --" + channel.getExitStatus());

channel.disconnect();
session.disconnect();

从“exec”频道的官方示例开始,不要重新发明轮子:

要读取错误,请使用
ChannelExec.getErrStream
读取错误流

或者将输出流和错误流合并为一个:

如果您已经知道会发生什么样的异常,我们可以使用以下方法

您可以通过获取输入流来检查您在远程主机中执行的命令的响应,然后根据您的成功标准解析该流

        ChannelExec execChannel = (ChannelExec) session.openChannel("exec");
        List<String> executionResult = new ArrayList<>();
        execChannel.setErrStream(System.err);
        InputStream consoleInputStream = execChannel.getInputStream();
        String command = "./executeScript.sh"
        execChannel.setCommand(command);
        execChannel.connect();
        BufferedReader consoleReader = new BufferedReader(new 
        InputStreamReader(consoleInputStream));
        String consoleData;
        while ((consoleData = consoleReader.readLine()) != null) {
            executionResult.add(consoleData);
        }

        for (String resultLine : executionResult) {
            Pattern errorPattern = Pattern.compile(("(?i)\\Exception\\b"));
            Matcher errorMatcher = errorPattern.matcher(resultLine); 
            if (errorMatcher.find())
      logs.writeLog(Level.SEVERE, "Error occurred while executing command");
        }
ChannelExec execChannel=(ChannelExec)session.openChannel(“exec”);
List executionResult=新建ArrayList();
setErrStream(System.err);
InputStream控制台InputStream=execChannel.getInputStream();
String命令=“./executeScript.sh”
execChannel.setCommand(命令);
execChannel.connect();
BufferedReader控制台Reader=新BufferedReader(新
InputStreamReader(控制台InputStream));
字符串合并数据;
而((consoleData=consoleReader.readLine())!=null){
executionResult.add(控制台数据);
}
for(字符串结果行:executionResult){
Pattern errorPattern=Pattern.compile((“(?i)\\Exception\\b”);
Matcher errorMatcher=errorPattern.Matcher(结果行);
if(errorMatcher.find())
logs.writeLog(Level.SEVERE,“执行命令时出错”);
}

错误,例如,我正在尝试执行一个我没有执行权限的脚本。显示您的代码!添加到主要问题中,您已经阅读了输出和退出代码。它们返回什么?为什么调用
channel.connect()
setCommand
之前?按照官方的例子: