diff --git a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java index 3217af63f..e61bbc27a 100644 --- a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java +++ b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java @@ -603,34 +603,26 @@ private String replacePipeAlias(ArgsParser ap, String pipeAlias, List ar return sb.toString(); } - private List compileCommandLine(String commandLine) { - List out = new ArrayList<>(); - ArgsParser ap = new ArgsParser(parser); - ap.parse(commandLine); - // - // manage pipe aliases - // - List ws = ap.args(); - ConsoleEngine consoleEngine = consoleEngine(); - Map> customPipes = consoleEngine != null ? consoleEngine.getPipes() : new HashMap<>(); - if (consoleEngine != null && ws.contains(pipeName.get(Pipe.NAMED))) { + private void replacePipeAliases(ConsoleEngine consoleEngine, Map> customPipes, ArgsParser ap) { + List words = ap.args(); + if (consoleEngine != null && words.contains(pipeName.get(Pipe.NAMED))) { StringBuilder sb = new StringBuilder(); boolean trace = false; - for (int i = 0 ; i < ws.size(); i++) { - if (ws.get(i).equals(pipeName.get(Pipe.NAMED))) { - if (i + 1 < ws.size() && consoleEngine.hasAlias(ws.get(i + 1))) { + for (int i = 0; i < words.size(); i++) { + if (words.get(i).equals(pipeName.get(Pipe.NAMED))) { + if (i + 1 < words.size() && consoleEngine.hasAlias(words.get(i + 1))) { trace = true; List args = new ArrayList<>(); - String pipeAlias = consoleEngine.getAlias(ws.get(++i)); - while (i < ws.size() - 1 && !names.isPipe(ws.get(i + 1), customPipes.keySet())) { - args.add(ws.get(++i)); + String pipeAlias = consoleEngine.getAlias(words.get(++i)); + while (i < words.size() - 1 && !names.isPipe(words.get(i + 1), customPipes.keySet())) { + args.add(words.get(++i)); } sb.append(replacePipeAlias(ap, pipeAlias, args, customPipes)); } else { - sb.append(ws.get(i)).append(' '); + sb.append(words.get(i)).append(' '); } } else { - sb.append(ws.get(i)).append(' '); + sb.append(words.get(i)).append(' '); } } ap.parse(sb.toString()); @@ -638,6 +630,16 @@ private List compileCommandLine(String commandLine) { consoleEngine.trace(ap.line()); } } + } + + + private List compileCommandLine(String commandLine) { + List out = new ArrayList<>(); + ArgsParser ap = new ArgsParser(parser); + ap.parse(commandLine); + ConsoleEngine consoleEngine = consoleEngine(); + Map> customPipes = consoleEngine != null ? consoleEngine.getPipes() : new HashMap<>(); + replacePipeAliases(consoleEngine, customPipes, ap); List words = ap.args(); String nextRawLine = ap.line(); int first = 0; @@ -646,10 +648,13 @@ private List compileCommandLine(String commandLine) { String pipeSource = null; String rawLine = null; String pipeResult = null; + if (isCommandAlias(ap.command())) { + ap.parse(replaceCommandAlias(ap.variable(), ap.command(), nextRawLine)); + replacePipeAliases(consoleEngine, customPipes, ap); + nextRawLine = ap.line(); + words = ap.args(); + } if (!names.hasPipes(words)) { - if (isCommandAlias(ap.command())) { - nextRawLine = replaceCommandAlias(ap.variable(), ap.command(), nextRawLine); - } out.add(new CommandData(ap, false, nextRawLine, ap.variable(), null, false,"")); } else { // @@ -661,6 +666,7 @@ private List compileCommandLine(String commandLine) { String variable = parser.getVariable(words.get(first)); if (isCommandAlias(command)) { ap.parse(replaceCommandAlias(variable, command, nextRawLine)); + replacePipeAliases(consoleEngine, customPipes, ap); rawCommand = ap.rawCommand(); command = ap.command(); words = ap.args();