Пакет для Windows — как сохранить вывод терминала при сохранении цветного текста?

Иногда вывод программы в терминале окрашен. Например 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 ответ
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 часов назад

  • 1

    Попробуйте версию, поставляемую с Cygwin. Большинство программного обеспечения Cygwin изначально предназначалось для Linux и использует последовательности ANSI, поэтому libcygwin при необходимости волшебным образом переведет их в API консоли Windows.

    — user1686
    6 часов назад

  • И да, PuTTY должен работать, по крайней мере, при подключении к хостам Linux / BSD по SSH — он имеет встроенный эмулятор терминала для обработки последовательностей ANSI. (Git объединял «PuTTYcyg» просто для эмулятор терминала, который у него есть.) Это может не обязательно работать при SSHing в Windows, поскольку некоторые серверы Windows SSH фактически работают, захватывая содержимое консоли (поэтому, если консоль не может что-то отобразить, оно не будет отправлено через SSH или).

    — user1686
    5 часов назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *