从JSch中的命令输出中删除shell东西(如提示)

时间:2016-10-19 22:29:28

标签: java shell ssh jsch

我已成功通过SSH连接到节点,发送输入并检索输出。输入一行后,该行将打印到控制台,然后是空白行,然后输出打印两次。我不希望输入在输入后打印到控制台,也不是空行,也不是第二次打印输出。以下是我的代码

public void runSession() {
    try {
        Channel channel = session.openChannel("shell");
        channel.setInputStream(System.in, true);
        channel.setOutputStream(System.out, true);
        channel.connect(defaultChannelTimeout);

        while (channel.getExitStatus() == -1) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }

        channel.disconnect();
    } catch(JSchException jschEx) {
        System.out.println("JSch exception during I/O");
        System.out.println(jschEx.getMessage());
    }
}

这是控制台在运行时的样子

  

用户:域@节点:/ A / B / c取代; cd ..

     

cd ..

     

用户:域@节点:/ A / B个   用户:域@节点:/ A / B个

如您所见,存在一些问题:

  • " cd .."单独打印到控制台的一行
  • " cd .."
  • 后出现一个空白行
  • " user:domain @ node:/ a / b>"行打印两次。

有谁知道如何删除控制台中显示的这三项?期望的输出是

  

用户:域@节点:/ A / B / c取代; CD ..

     

用户:域@节点:/ A / B个

1 个答案:

答案 0 :(得分:1)

这些都是“shell”频道的后果。

您使用人类用户喜欢的所有花哨内容运行交互式会话。

“shell”频道不适用于自动化。

您可以在channel.setPty(false)之前致电channel.connect()来删除部分内容。

虽然你最好使用“exec”频道。

这可能有效:

( echo username & echo password & echo hostname ) | command

相关问题: