JSch如何从一系列管道命令中检索结果

问题描述 投票:0回答:1

我的命令的第一部分的结果被传送到第二部分。当我运行代码时,总是得到第一部分的结果,而第二部分应用的过滤器显然未执行。

所以我得到了:

CONTAINER ID   IMAGE  COMMAND   CREATED      STATUS       PORTS   NAMES
abcdeff        a/b/1  "usr/.."  15 mins ago  Up to 2 mins         something.1.2
123abcd        a/b/2  "usr/.."  32 mins ago  exited               something.1.3
234456d        a/b/3  "usr/.."  2 days ago   exited               something.1.4

我想要的地方

CONTAINER
abcdeff
123abcd
234456d
public class Test {

  private static COMMAND =
  "echo \"password\" | sudo -S bash -c \"docker container ls --all | awk '{print $1}'\""

  executeExecCommand(command){
    JSch jsch = new JSch();
    Session session=jschgetSession(username, ipaddress, 22);
    session.setConfig("StrictHostKeyChecking", "no");
    session.setConfif("PreferredAuthentications", "password");
    Channel channel = session.openChannel("exec");
    ((ChannelExec)channel).setCommand(COMMAND);
    channel.setInputStream(null);
    ((ChannelExec)channel).setErrStream(System.err);
    InputStream input = channel.getInputStream();
    InputStream error = channel.getExtInputStream();
    channel.connect();
    List<String> output = new ArrayList<>();
    List<String> errorOutput = new ArrayList<>();

    try (InputStreamReader inputReader = new InputStreamReader(input);
      BufferedReader bufferedReader = new BufferedReader(inputReader);
      InputStreamReader errorReader = new InputStreamReader(error)) {

       String line = null;
       while (true) {
         while ((line = bufferedReader.readLine() != null {
         output.add(line:
         System.out.println("line = " + line);

       etc
       etc
       }
     }
}

这与在目标服务器上的其他Shell中执行的管道处理有关吗?如果是这样,我如何实现返回过滤列表的目标?

java jsch
1个回答
0
投票

我需要转存美元。 COMMAND =“ echo \” password \“ | sudo -S bash -c \” docker容器ls --all | awk'{print \ $ 1}'\“”作品

请注意,如果我想进一步开发此命令来删除容器,例如,我还需要转义反引号。

COMMAND =“ echo \” password \“ | sudo -S bash -c \” docker container rm`docker container ls –all | awk'{print \ $ 1}'\`\“”

它需要一个双反斜杠来避免$和反引号。在这里显示为单个反斜线

© www.soinside.com 2019 - 2024. All rights reserved.