I am trying to get the output of a shell script in java using JSch. Executing a sudo
admin command and get the output of a script.
Properties prop = new Properties();
InputStream input = null;
String host="myhost";
StringBuilder command1= new StringBuilder();
String userName = "root";
String password="password";
try{
JSch jsch = new JSch();
Session session = jsch.getSession(userName, host, 22);
session.setPassword(password);
session.connect();
System.out.println("Connected");
List<String> commands = new ArrayList<String>();
commands.add("ls");
commands.add("sudo myadmincmd");
commands.add("cd /logs");
commands.add("my script...");
Channel channel = session.openChannel("shell");
channel.connect();
channel.setOutputStream(System.out);
OutputStream os = channel.getOutputStream();
PrintStream shell = new PrintStream(os, true);
for (String cmd : commands) {
shell.println(cmd);
try {
Thread.sleep(2000);
}
catch (Exception ee) {
}
}
shell.println("exit");
shell.close();
channel.disconnect();
session.disconnect();
}catch(Exception e){
e.printStackTrace();
}
Output:
*ADMINSHELL* :/home/abcd # cd /logs
*ADMINSHELL* :/logs #
*ADMINSHELL* :/logs # my script...
....
output goes here...
....
How can I get the output of only this ADMINSHELL? For example I only need the final output. I tried using a check as below,
for (String cmd : commands) {
if(cmd.startsWith("for script")){
shell.println(cmd);
}
try {
Thread.sleep(2000);
}
catch (Exception e) {
}
}
But this time I am getting some permission denied issues. I need only the output of the last script.
....
output goes here...
....