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