Иногда вывод программы в терминале окрашен. Например aria2:
aria2c https://superuser.com > z.txt
Выходной файл выглядит так:
08/13 03:42:27 [[1;32mNOTICE[0m] Downloading 1 item(s)
08/13 03:42:28 [[1;32mNOTICE[0m] Download complete: G:/LH/1/index.html
Вывод команды (без перенаправления вывода в файл) выглядит следующим образом:
Я заметил, что в Mac OS можно отображать вывод с помощью цвета с помощью cat.
Также в Linux это можно сделать в Терминале GNOME.
Я пробовал использовать type и cat (из GnuWin32), и это не сработало.
Есть ли решение для этого? У меня есть sed, я могу использовать его для замены escape-кода ASCII (Hex 1B) на что-то вроде «^ ESC ^»
1 ответ
aria2c сделал спасти цвета — проблема в том, что вы не можете просмотреть их в своей версии Windows.
И macOS, и Linux (т.е. терминал GNOME) используют форматирование с помощью «последовательностей ANSI», которые выводятся вместе с фактическим текстом — например, ESC [1;32m
в вашем журнале aria2c означает «жирный и зеленый».
Но консоль Windows не, очень давно. Если программа хотела использовать цвета в консольных окнах, ей приходилось вызывать специальные Windows API, чтобы это произошло. Если бы программа просто записывала ANSI-последовательности на свой вывод — Windows все равно. (В целом, на самом деле есть причина, по которой его называют «окном консоли», а не «окном терминала».)
Поддержка консольной последовательности ANSI была добавлена только в Windows 10 — сначала в версии 1511, затем отключена в 1607, а затем снова включена в 1909. Похоже, ваш снимок экрана сделан из Windows 8.1 (или Server 2012, также на основе 8.1), поэтому вы этого не сделаете. эта функция еще доступна.
В вашем случае информация о цвете был сохраняются как последовательности ANSI, однако, поскольку aria2c автоматически переключается между режимами «Windows console API» и «ANSI» — он использует API при записи в консоль, но записывает последовательности ANSI, когда обнаруживает, что его выходные данные идут в файл. Но вы не сможете просмотреть его в Windows 8, просто type
; вместо этого вам нужно:
Обновление до Windows 10. Встроенная консоль имеет поддержку ANSI в Windows 10, хотя приложение Microsoft «Windows Terminal» в целом намного лучше.
Загрузите другое консольное приложение, которое делает понимать последовательности VT — кажется, ConEmu — популярный выбор среди пользователей Cmd.exe.
Также возможна установка терминала Xterm / Urxvt / GNOME через Cygwin. Если у вас установлен «Git for Windows», он поставляется с MinTTY, который также будет работать в этом случае.
Прочтите файл журнала через SSH (например, PuTTY). Даже клиенты Windows SSH обычно поставляются вместе с эмулятором терминала, совместимым с ANSI / VT.
Установите АНСИКОН хак, который добавляет поддержку последовательности ANSI с помощью хуков.
Прочтите файл журнала с помощью «программы просмотра изображений ANSI». Они предназначены для совместимости с MS-DOS ANSI.SYS, поэтому часто поддерживают ограниченный набор последовательностей форматирования (обычно только 8 цветов) и полностью не поддерживают Unicode, но в крайнем случае подойдут.
Используйте версию Cygwin для ‘cat’ — среда выполнения cygwin автоматически преобразует последовательности ANSI, выводимые программами на основе cygwin, в вызовы Windows Console API по мере необходимости.
Большое спасибо! Я нашел ACiDview, который может отображать такие файлы, но не показывает пустых строк. Я пробовал ConEmu, но ANSICON меньше по размеру и сохраняет внешний вид консоли Windows. ANSICON хорошо работает (с «типом»). Есть ли какая-нибудь версия «кота», которая может отображать цвета в этой консоли? Можно ли использовать ssh-клиент putty для чтения таких файлов? Я пробовал, но, похоже, не работает.
— Джо Джобс
6 часов назад
Вопрос: aria2c удалось не только сохранить цвета, но и показать цвета на экране. И затем, есть ли какая-либо модифицированная версия шрифта или кота, которая также может отображать эти цвета в Windows 8.1?
— Джо Джобс
6 часов назад
Попробуйте версию, поставляемую с Cygwin. Большинство программного обеспечения Cygwin изначально предназначалось для Linux и использует последовательности ANSI, поэтому libcygwin при необходимости волшебным образом переведет их в API консоли Windows.
— user1686
6 часов назад
И да, PuTTY должен работать, по крайней мере, при подключении к хостам Linux / BSD по SSH — он имеет встроенный эмулятор терминала для обработки последовательностей ANSI. (Git объединял «PuTTYcyg» просто для эмулятор терминала, который у него есть.) Это может не обязательно работать при SSHing в Windows, поскольку некоторые серверы Windows SSH фактически работают, захватывая содержимое консоли (поэтому, если консоль не может что-то отобразить, оно не будет отправлено через SSH или).
— user1686
5 часов назад