如何在字符串中获取jsch shell命令输出
我正在使用JSCH -SSH库在“ shell”通道中执行命令,但找不到找到两种方法的方法:
1)如何查找命令是否在远程unix box上完全执行?
2)如何在String中捕获命令输出,而不是在System.out控制台上打印它?
下面是我的代码片段,可以在system.out上显示shell命令输出
注意:我不想使用“ exec”通道,因为它为每个命令启动一个新进程,并且不记得已导出的“ session”变量。我必须使用“ shell”通道。
以下是我的代码段。感谢您的帮助。
try{ String commandToRun = "ls /tmp/*.log \n";
if(channel.isClosed())
channel=session.openChannel("shell");
byte[] bytes = commandToRun.getBytes();
ByteArrayInputStream bais=new ByteArrayInputStream(bytes);
channel.setInputStream(bais);
InputStream ins=channel.getInputStream();
channel.connect();
channel.setOutputStream(System.out);//This prints on console. Need 2 capture in String somehow?
//in-efficient way to allow command to execute completely on remote Unix machine
//DO NOT know a better way, to know when command is executed completely
Thread.sleep(5000L);
}
catch(Exception e){
System.out.println("Exception in executeCommand() --->"+ e.getMessage());
e.printStackTrace();
}
回答:
对于2)你可以使用 ByteArrayOutputStream
final ByteArrayOutputStream baos = new ByteArrayOutputStream();channel.setOutputStream(baos);
然后从创建新字符串 new String(baos.toByteArray())
对于1,您是否尝试在命令末尾使用2>&1?
String commandToRun = "ls /tmp/*.log 2>&1 \n";
以上是 如何在字符串中获取jsch shell命令输出 的全部内容, 来源链接: utcz.com/qa/398425.html