如何在字符串中获取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

回到顶部