我的COMMAND有第一部分,其结果通过管道传送到第二部分。当我运行代码时,总是得到第一部分的结果,而第二部分应用的过滤器显然未执行。
所以我得到了:
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中执行的管道处理有关吗? 如果是这样,我如何实现返回过滤列表的目标?
答案 0 :(得分: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}'\`\“”
它需要一个双反斜杠来避开$和反引号。它在这里显示为单个反斜杠