【问题标题】:How to cope with interactive Linux commands?如何应对交互式 Linux 命令?
【发布时间】:2013-02-21 10:44:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android bash ssh jsch


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2021-12-12
      • 2021-09-16
      • 1970-01-01
      • 2012-10-31
      • 2012-02-20
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多