Asciinema: Трансляция содержит нежелательную команду выхода

Созданный на 24 февр. 2018  ·  3Комментарии  ·  Источник: asciinema/asciinema

Привет,

Мне было интересно, почему exit печатается после нажатия CTRL + D чтобы завершить приведение с помощью rec .

redaxmedia<strong i="10">@redaxmedia</strong>:~$ exit
asciinema: recording finished
asciinema: press <enter> to upload to asciinema.org, <ctrl-c> to save locally

Приведение, сгенерированное asciinema 1.xx, выглядит нормально - я бы хотел снова избавиться от него.

До

Before

После

After

Самый полезный комментарий

При выпуске 2.0 я знал об этой регрессии, но не хотел блокировать выпуск из-за этого. Но сейчас хорошее время, чтобы обсудить это.

Это ваша оболочка, которая печатает exit когда вы нажимаете ctrl + d, кстати :)

Предыдущая версия asciinema хранила всю запись в памяти перед сохранением ее в файл, и было легко обнаружить «выход» в последнем записанном кадре и выбросить его (потому что asciinema знала, что это последний кадр). В новой версии появился новый формат файлов, который более удобен для потоковой передачи в реальном времени и записывает на диск в реальном времени. В связи с этим, когда сеанс записи завершается, «выход» уже был записан в файл. И мы не можем просто выбросить любой «выход», напечатанный на терминале, мы можем удалить только последний, потому что у вас могут быть вложенные сеансы bash, и этот «выход» может быть полезной информацией для тех, кто следит за тем, как вы вышли из внутренней оболочки. .

Для этого есть несколько возможных решений:

  1. при записи сохраняйте последний кадр в памяти и записывайте его на диск при появлении нового, делая его буфером размером 1 кадр - обратная сторона здесь может привести к потере данных при сбое / закрытии терминала (хотя только 1 кадр),
  2. после закрытия файла в конце сеанса мы могли бы повторно открыть его и отфильтровать окончательный «выход» - это нужно было бы сделать в потоковом режиме (чтобы не загружать все в память), аналогично решению 1. ,
  3. фильтровать его во время воспроизведения, а не во время записи - это потребует некоторой формы упреждающего чтения для asciinema play .... в терминале, но это очень легко сделать в веб-плеере, который буферизует всю запись в памяти (это отдельный тема, в идеале я бы не хотел требовать целую запись в веб-браузерах mem)

В общем, я предпочитаю не изменять исходные данные при записи (изменять текст, изменять время, удалять кадры). Удаление окончательного «выхода» - это удаление данных из потока, однако это не то, чего на самом деле хочет пользователь, поэтому я могу избавиться от него.

Решение 2. На данный момент мне кажется самым простым.

Все 3 Комментарий

При выпуске 2.0 я знал об этой регрессии, но не хотел блокировать выпуск из-за этого. Но сейчас хорошее время, чтобы обсудить это.

Это ваша оболочка, которая печатает exit когда вы нажимаете ctrl + d, кстати :)

Предыдущая версия asciinema хранила всю запись в памяти перед сохранением ее в файл, и было легко обнаружить «выход» в последнем записанном кадре и выбросить его (потому что asciinema знала, что это последний кадр). В новой версии появился новый формат файлов, который более удобен для потоковой передачи в реальном времени и записывает на диск в реальном времени. В связи с этим, когда сеанс записи завершается, «выход» уже был записан в файл. И мы не можем просто выбросить любой «выход», напечатанный на терминале, мы можем удалить только последний, потому что у вас могут быть вложенные сеансы bash, и этот «выход» может быть полезной информацией для тех, кто следит за тем, как вы вышли из внутренней оболочки. .

Для этого есть несколько возможных решений:

  1. при записи сохраняйте последний кадр в памяти и записывайте его на диск при появлении нового, делая его буфером размером 1 кадр - обратная сторона здесь может привести к потере данных при сбое / закрытии терминала (хотя только 1 кадр),
  2. после закрытия файла в конце сеанса мы могли бы повторно открыть его и отфильтровать окончательный «выход» - это нужно было бы сделать в потоковом режиме (чтобы не загружать все в память), аналогично решению 1. ,
  3. фильтровать его во время воспроизведения, а не во время записи - это потребует некоторой формы упреждающего чтения для asciinema play .... в терминале, но это очень легко сделать в веб-плеере, который буферизует всю запись в памяти (это отдельный тема, в идеале я бы не хотел требовать целую запись в веб-браузерах mem)

В общем, я предпочитаю не изменять исходные данные при записи (изменять текст, изменять время, удалять кадры). Удаление окончательного «выхода» - это удаление данных из потока, однако это не то, чего на самом деле хочет пользователь, поэтому я могу избавиться от него.

Решение 2. На данный момент мне кажется самым простым.

Спасибо за ваше объяснение.

Я видел приведения, когда люди использовали exit более CTRL+D и это приводило к печати двух выходов. Однако я надеюсь, что это действительная ошибка, и что кто-то скоро ее исправит.

Есть обновления по этому поводу? Я столкнулся с той же проблемой.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

deeplook picture deeplook  ·  10Комментарии

nictuku picture nictuku  ·  10Комментарии

Edo78 picture Edo78  ·  5Комментарии

lukehinds picture lukehinds  ·  5Комментарии

TyrfingMjolnir picture TyrfingMjolnir  ·  7Комментарии