From 525757eb887ff74e58e2654d5d1b2f1452b7a19f Mon Sep 17 00:00:00 2001 From: wjc <1183245856@qq.com> Date: Tue, 21 Jul 2026 15:49:29 +0800 Subject: [PATCH] fix: preserve background marker in batch mode --- .../taobao/arthas/client/TelnetConsole.java | 6 ++++- .../client/TelnetConsoleBatchModeTest.java | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/client/src/main/java/com/taobao/arthas/client/TelnetConsole.java b/client/src/main/java/com/taobao/arthas/client/TelnetConsole.java index ce09d1ffe2..ca72f3d289 100644 --- a/client/src/main/java/com/taobao/arthas/client/TelnetConsole.java +++ b/client/src/main/java/com/taobao/arthas/client/TelnetConsole.java @@ -417,7 +417,11 @@ public void run() { } } // send command to server - outputStream.write((command + " | plaintext\n").getBytes(StandardCharsets.UTF_8)); + String commandWithPlaintext = command.replaceFirst("\\s*&\\s*$", " | plaintext &"); + if (commandWithPlaintext.equals(command)) { + commandWithPlaintext += " | plaintext"; + } + outputStream.write((commandWithPlaintext + "\n").getBytes(StandardCharsets.UTF_8)); outputStream.flush(); } diff --git a/client/src/test/java/com/taobao/arthas/client/TelnetConsoleBatchModeTest.java b/client/src/test/java/com/taobao/arthas/client/TelnetConsoleBatchModeTest.java index 79692984e3..c5048451b4 100644 --- a/client/src/test/java/com/taobao/arthas/client/TelnetConsoleBatchModeTest.java +++ b/client/src/test/java/com/taobao/arthas/client/TelnetConsoleBatchModeTest.java @@ -45,6 +45,31 @@ void quietBatchModeShouldSendCommandWhenPromptStartsTheStream() throws Exception } } + @Test + void batchModeShouldKeepBackgroundMarkerAfterPlaintextPipeline() throws Exception { + ExecutorService executorService = Executors.newSingleThreadExecutor(); + try (ServerSocket serverSocket = new ServerSocket(0)) { + Future serverResult = executorService.submit(() -> runPromptFirstServer(serverSocket)); + + int status = TelnetConsole.process(new String[] { + "--quiet", + "-c", + "version &", + "-t", + "1000", + "127.0.0.1", + String.valueOf(serverSocket.getLocalPort()) + }); + + ServerResult result = serverResult.get(2, TimeUnit.SECONDS); + assertThat(status).isEqualTo(TelnetConsole.STATUS_OK); + assertThat(result.command).contains("version | plaintext &"); + assertThat(result.quit).isEqualTo("quit"); + } finally { + executorService.shutdownNow(); + } + } + @Test void batchModeShouldNegotiateBinaryAndSendChineseCommandAsUtf8() throws Exception { ExecutorService executorService = Executors.newSingleThreadExecutor();