天天看點

java jsch shell_僅在JSch shell通道中擷取特定指令的輸出

我試圖在使用JSch的java中擷取shell腳本的輸出。執行sudo管理指令并擷取腳本的輸出。僅在JSch shell通道中擷取特定指令的輸出

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 commands = new ArrayList();

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

}

輸出:

*ADMINSHELL* :/home/abcd # cd /logs

*ADMINSHELL* :/logs #

*ADMINSHELL* :/logs # my script...

....

output goes here...

....

我怎樣才能得到隻有這ADMINSHELL的輸出?例如,我隻需要最終輸出。我試着用下面的支票,

for (String cmd : commands) {

if(cmd.startsWith("for script")){

shell.println(cmd);

}

try {

Thread.sleep(2000);

}

catch (Exception e) {

}

}

但是這次我得到了一些權限被拒絕的問題。我隻需要最後腳本的輸出。

....

output goes here...

....

2016-08-11

NaaN