JSch:ByteArrayInputStream:如何检查终端结果

时间:2015-06-29 12:59:09

标签: java jsch

我将使用Jsch ssh到另一台服务器
并检查路径是否存在

但我发现baos.toString() 将在终端上打印出所有结果:

test -d /root/bin/python || echo python not found
test -d /root/bin/java || echo java not found
test -d Desktop || echo java not found
[root@s1 ~]# test -d /root/bin/python || echo python not found
[root@s1 ~]# test -d /root/bin/java || echo java not found

所以它总会返回false:

if (baos.toString().contains("not found")){
                 return false;
             }

代码:

    String command = null;           
    command = String.format("test -d %s || echo python not found\n"
        + "test -d %s || echo java not found\n",python,java);       
    try{ 
       JSch jsch = new JSch();
       jsch.addIdentity("/Users/.ssh/id_rsa");  

       Session session = jsch.getSession("root", IP, 22);
       session.setConfig("StrictHostKeyChecking", "no");
       session.connect(10*1000);
       Channel channel = session.openChannel("shell");
       InputStream is = new ByteArrayInputStream(command.getBytes());
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
        channel.setInputStream(is);
        channel.setOutputStream(baos);
        channel.connect(15 * 1000);
        Thread.sleep(3*1000);
        channel.disconnect();
        session.disconnect();
        logger.debug(baos.toString());
        if (baos.toString().contains("not found")){
             return false;
         }
    }catch (DataAccessException e) {
        e.printStackTrace();
        return false;
    }      
    return true;    

请帮帮我

2 个答案:

答案 0 :(得分:1)

显然,Jsch以与真正的ssh会话相同的方式回应输入。您可以通过更改回显的字符串来解决此问题。

例如,而不是

echo java not found

使用

echo not found java

为什么呢?因为那时单词“not found”将是第一行,而不是回显的输入行。所以你现在可以稍微改变你的比赛:

 if (baos.toString().contains("\nnot found")){
     return false;
 }

请注意\n字符。如果“未找到”出现在输出中的一行的开头(在换行符之后),则会找到它并返回false。如果它没有出现在一行的开头,则无法找到它。

您可能希望查看围绕jsch的{​​{3}},并且更容易使用。

答案 1 :(得分:0)

使用java.io.File课程。类似下面的功能应该有所帮助:

import java.io.File;
private boolean doesFileExist(String fileName)
{
   File f = new File(fileName);
   return f.exists();
}

在这种情况下,您的文件名为/root/workspace/file1/root/workspace/file2