如何应对交互式Linux命令?

时间:2013-03-06 15:02:59

标签: java android bash ssh jsch

我有代码允许我通过ssh连接,运行命令并获得响应。它工作正常但仅适用于非交互式命令(例如:lsdf,它们在运行后立即返回结果)。问题是当我尝试运行某些交互式命令时,如toppasswd代码正在等待响应(当然也没有)。

如何应对交互式命令?我真的不关心输出,我只是想运行它。

public String runCommand(String command)  throws Exception {

    // SSH Channel
    ChannelExec channelssh = (ChannelExec) session.openChannel("exec");      

    // Execute command
    channelssh.setCommand(command);
    channelssh.connect();     

    InputStream inputStream = channelssh.getInputStream(); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;

    while ((line = bufferedReader.readLine()) != null) 
    {
        stringBuilder.append(line);
        stringBuilder.append('\n');
    }

    channelssh.disconnect();
    return stringBuilder.toString();   
}

1 个答案:

答案 0 :(得分:1)

1,您可以使用ChannelShell。这是一个例子:Shell.java。这篇文章阐明了exec和shell之间的区别:what's the exact differences between jsch ChannelExec and ChannelShell?

2,我尝试了ChannelExec.setPty(true)。通过这种方式,我可以获得输出。但是,它没有停止。