diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index 741ce4d78..a62bb50bb 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -179,6 +179,7 @@ trait Terminal extends AutoCloseable { } object Terminal { + val NO_BOOT_CLIENTS_CONNECTED: Int = -2 // Disable noisy jline log spam if (System.getProperty("sbt.jline.verbose", "false") != "true") jline.internal.Log.setOutput(new PrintStream(_ => {}, false)) @@ -619,6 +620,11 @@ object Terminal { if (running.get) { inputStream.read match { case -1 => + case `NO_BOOT_CLIENTS_CONNECTED` => + if (System.console == null) { + result.put(-1) + running.set(false) + } case i => result.put(i) running.set(false) diff --git a/main-command/src/main/java/sbt/internal/BootServerSocket.java b/main-command/src/main/java/sbt/internal/BootServerSocket.java index b153f32f9..3cda9e830 100644 --- a/main-command/src/main/java/sbt/internal/BootServerSocket.java +++ b/main-command/src/main/java/sbt/internal/BootServerSocket.java @@ -216,6 +216,7 @@ public class BootServerSocket implements AutoCloseable { new InputStream() { @Override public int read() { + if (clientSockets.isEmpty()) return Terminal.NO_BOOT_CLIENTS_CONNECTED(); try { synchronized (needInput) { needInput.set(true);