Как обойти артефакты терминала при использовании диалоговой программы под докером, запущенной в сеансе экрана

Эта единственная строка предоставит вам файлы, которые вы хотите удалить:

(ls -1 db_ * _foo.tgz; echo) | awk '{prevym = ym; prevfile = файл; ym = substr (0,4,6 $); файл = $ 0; if (ym == prevym) print prevfile} '

Первая часть просто перечисляет ВСЕ файлы (и добавляет дополнительную строку в конец списка, чтобы упростить последующую команду awk). Часть awk просто проверяет каждую строку, чтобы увидеть, изменился ли ym (год-месяц) от одной строки к другой.

Проверьте и убедитесь, что в приведенном выше списке перечислены файлы, которые вы НЕОБХОДИМО удалить. Затем, чтобы удалить все файлы, просто введите команду по конвейеру:

... ABOVE_COMMAND ... | xargs rm

0
04.05.2018, 09:40
1 ответ

Терминал, с точки зрения утилиты диалога, является терминалом, который эмулируется программой screen. Программа screen, в свою очередь, взаимодействует с другим терминалом, который в меню называется терминалом GNOME, терминалом MATE или чем-то подобным.

Утилита диалога использует управляющие последовательности для одновременной очистки целой группы ячеек символов. Существуют различные управляющие последовательности «стирания», определенные стандартом ECMA -48, которые позволяют стирать до конца строки, до конца дисплея или следующих N символов. Эти управляющие последовательности обрабатываются screen.

Существует два режима работы терминалов для обработки таких последовательностей стирания: :стирание с использованием текущего цвета фона или стирание с использованием цвета фона по умолчанию . На втором снимке экрана вы можете увидеть результат работы программы, в данном случае вашей диалоговой утилиты, которая считает, что стирание использует текущий цвет фона, когда терминал фактически реализует стирание, используя цвет фона по умолчанию. (Первый скриншот появляется двумя способами. Либо терминал стирает, используя текущий цвет фона, либо приложение распознает, что возможности стирания цвета фона вообще нет, и корректирует свой вывод соответствующим образом, чтобы сделать большие пустые области каким-то другим способом.)

Это поведение можно переключать в случае screen, как и в случае некоторых других терминалов и эмуляторов терминалов. По умолчанию в screen, поэтому -с именем стирание цвета фона отключено, а управляющие последовательности вызывают стирание с цветом по умолчанию. Включается командой bce, вызывая стирание с текущим фоновым цветом. Для самой настройки bceна всех новых экранах устанавливается значение по умолчанию с помощью команды defbce.

Утилита диалога должна знать об этом.Не все терминалы имеют стирание цвета фона , не говоря уже о возможности переключения.

Что информирует диалоговую утилиту, так это запись, соответствующая типу терминала (, обозначенному, как вы помните, значением TERMпеременной окружения , видимой диалоговой программой)в базе данных terminfo. В этой записи есть возможность, которая позволяет программам определять, что будет делать терминал, с которым они разговаривают. Называется bce. (Эквивалентное имя termcap — ut.)

Усложнение — это screenспособ сообщить таким программам, что такое терминал. Другие эмуляторы терминала просто определяют, как они ведут себя как терминал, и требуют, чтобы программы запускались с определенным типом терминала для их эмуляции терминала. tmux просто имеет типы терминаловtmuxи tmux-256color, например, описывающие поведение одного эмулируемого терминала tmux. screen, напротив, создает причудливый тип терминала mongrel , который сочетает в себе тип эмуляции screenс типом внешнего, отображаемого на терминале, напримерscreen.xterm-256colorв вашем случае, который затем имеет чтобы иметь соответствующую запись дворняги в базе данных terminfo.

Проблема здесь частично заключается в том, что вы неправильно -описываете свой внешний, визуализированный на, терминал для screenв первую очередь. Это не XTerm, он не полностью совместим с XTerm, и его правильный тип терминала, несмотря на то, что вы можете слышать, неxterm. Его правильный тип терминала —gnome-256colorили vte-256colour, что на самом деле конкретно описывает эмуляторы на основе libvte -, такие как GNOME Terminal. (Вы можете запустить infocmp {xterm,vte}-256color, чтобы узнать, как ваша система считает, что эти два эмулятора терминала различаются. И это только те части эмуляций, которые на самом деле охватывает база данных terminfo.)

Вам нужно:

  • Укажите правильный тип терминала для (передней -части рендеринга конца )screen, который правильно описывает эмуляторы терминала на основе libvte -.
  • Укажите правильный тип терминала для приложений, работающих с screenсобственной эмуляцией терминала . screenсоздаст тип дворняжки screen.vte-256color. Вместо этого вы также можете использовать что-то вроде screen-256color-bce.
  • Укажите screen, чтобы включить стирание цвета фона с помощью настройки bceили команды defbceперед созданием экрана. Обратите внимание, что на это будет влиять видимость вашего файла ${HOME}/.screenrcв любом контексте, в котором вы вызываете screen.

Альтернатива ниже (, поскольку стирание цвета фона является полезной оптимизацией для таких программ, как эта диалоговая утилита, которая окрашивает большие пустые блоки экрана )подход:

  • По-прежнему обеспечивает правильный тип терминала для (передней -части рендеринга )screen, который правильно описывает эмуляторы терминала на основе libvte -.
  • Предоставление надлежащего типа терминала приложениям, работающим против screenсобственной эмуляции терминала , но на этот раз один из тех, которые не рекламируют возможность стирания цвета фона, например обычный тип screen-256color.
  • Оставьте screenс выключенным стиранием цвета фона.

Дополнительная литература

1
28.01.2020, 04:23

Теги

Похожие вопросы