Краткий ответ
Передача -no-colors
в sbt
в командной строке, в соответствии с sbt FAQ :
$ sbt -no-colors 'test:runMain gcd.GCDMain'
Несмотря на название «нет цветов» ", он подавляет все экранирующие элементы терминала, включая индикаторы выполнения.
Другие альтернативы
Параметр также может быть записан --no-colors
(два дефиса), как это выглядит в выходных данных. sbt --help
(и sbt -help
).
Тот же эффект может быть достигнут путем передачи -Dsbt.log.noformat=true
в sbt
(или в java
, если он вызывается напрямую), как указано в this ответ :
$ sbt -Dsbt.log.noformat=true 'test:runMain gcd.GCDMain'
Этого также можно добиться, установив для переменной среды JAVA_OPTS
значение -Dsbt.log.noformat=true
:
$ JAVA_OPTS=-Dsbt.log.noformat=true sbt 'test:runMain gcd.GCDMain'
Если вы используете sbt-launch.jar
, тогда вы должны использовать переключатель -D
, потому что -no-colors
не распознается в этом контексте (сценарий оболочки sbt
- это то, что распознает -no-colors
):
$ java -jar ~/opt/sbt-1.3.4/bin/sbt-launch.jar -Dsbt.log.noformat=true 'test:runMain gcd.GCDMain'
Наконец когда sbt
обнаруживает, что его стандартный вывод не является TTY, он подавляет вывод цвета:
$ sbt 'test:runMain gcd.GCDMain' | cat
Это не очень хороший вариант в файле Makefile. h, потому что вы теряете статус выхода sbt
(без дальнейших махинаций ).
К сожалению, sbt
не не уважают NO_COLOR
.
Выход стамески в любом случае имеет несколько цветов
При использовании Стамеска , например, шаблон Стамеска , даже с -no-colors
, некоторые Коды выхода терминала все равно появляются на выходе:
$ sbt -no-colors 'test:runMain gcd.GCDMain' | cat -tev
[info] Loading settings for project chisel-template-build from plugins.sbt ...$
[info] Loading project definition from /home/scott/wrk/learn/chisel/chisel-template/project$
[info] Loading settings for project chisel-template from build.sbt ...$
[info] Set current project to chisel-module-template (in build file:/home/scott/wrk/learn/chisel/chisel-template/)$
[warn] Multiple main classes detected. Run 'show discoveredMainClasses' to see the list$
[info] running gcd.GCDMain $
[^[[35minfo^[[0m] [0.001] Elaborating design...$
[^[[35minfo^[[0m] [1.064] Done elaborating.$
Total FIRRTL Compile Time: 512.0 ms$
file loaded in 0.114380184 seconds, 22 symbols, 17 statements$
[^[[35minfo^[[0m] [0.001] SEED 1581769687441$
test GCD Success: 168 tests passed in 1107 cycles in 0.047873 seconds 23123.91 Hz$
[^[[35minfo^[[0m] [0.037] RAN 1102 CYCLES PASSED$
[success] Total time: 3 s, completed Feb 15, 2020 4:28:09 AM$
Обратите внимание на вывод [^[[35minfo^[[0m]
ближе к концу. Это происходит потому, что chiselFrontend / src / main / scala / chisel3 / internal / Error. scala безоговорочно печатает escape-последовательности цветов (см. Функцию tag
), что, возможно, является ошибкой в Chisel с момента ее вывода явно выглядит как sbt
output.
Эффект setsid
В вашем примере Makefile вы вызываете sbt
через setsid
. Насколько я могу судить, все, что я сказал, в равной степени относится к этому обстоятельству. Однако вы, вероятно, захотите передать --wait
в setsid
, поэтому он будет ждать завершения sbt
перед выходом. В моем тестировании setsid
будет неявно ждать только тогда, когда stdout не является TTY, но я сомневаюсь, что вы действительно хотите эту скрытую изменчивость.