javasshjsch

JSch Exec output for error


I need to run shell script at a remote machine. I am using JSch to connect to the remote machine and executing the shell script using ChannelExec. I need to know how I can get to know, if there was any error while execution of the command.

Following is my code

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();

Solution

  • Start with the official example for the "exec" channel, do not re-invent the wheel:
    https://web.archive.org/web/20241207183201/http://www.jcraft.com/jsch/examples/Exec.java.html

    To read the error, read also the error stream using the ChannelExec.getErrStream.

    Or merge the output and error streams into one:
    How to get one stream from error stream and input stream when calling a script using JSCH