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 d4adac080..9d9d0cc2e 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 @@ -307,7 +307,9 @@ object Terminal { } } private[sbt] lazy val isAnsiSupported: Boolean = logFormatEnabled.getOrElse(useColorDefault) - private[this] val isDumbTerminal = "dumb" == System.getenv("TERM") + + private[this] val isDumb = "dumb" == System.getenv("TERM") + private[this] def isDumbTerminal = isDumb || System.getProperty("jline.terminal", "") == "none" private[this] val hasConsole = Option(java.lang.System.console).isDefined private[this] def useColorDefault: Boolean = { // This approximates that both stdin and stdio are connected, @@ -336,7 +338,7 @@ object Terminal { // In ci environments, don't touch the io streams unless run with -Dsbt.io.virtual=true if (System.getProperty("sbt.io.virtual", "") == "true" || !isCI) { hasProgress.set(isServer && isAnsiSupported) - consoleTerminalHolder.set(newConsoleTerminal()) + if (hasConsole && !isDumbTerminal) consoleTerminalHolder.set(newConsoleTerminal()) activeTerminal.set(consoleTerminalHolder.get) try withOut(withIn(f)) finally { @@ -744,7 +746,7 @@ object Terminal { private[sbt] def reset(): Unit = { jline.TerminalFactory.reset() console.close() - consoleTerminalHolder.set(newConsoleTerminal()) + if (hasConsole && !isDumbTerminal) consoleTerminalHolder.set(newConsoleTerminal()) } // translate explicit class names to type in order to support @@ -760,7 +762,7 @@ object Terminal { case "jline.WindowsTerminal" => "windows" case "jline.AnsiWindowsTerminal" => "windows" case "jline.UnsupportedTerminal" => "none" - case null if isDumbTerminal => "none" + case null if isDumb => "none" case x => x } if (newValue != null) {