2

Я играю с перенаправлением ввода / вывода, и у меня есть проблема с меньшим поведением по-разному в двух средах. Обе среды основаны на Solaris и имеют одинаковую версию.

Я выполняю программу в двух средах, как это:

ENV 1:

script </dev/pts/1 >&/dev/pts/1 (/dev/pts/1 is my SSH session terminal)

ENV 2:

script </dev/console >&/dev/console (/dev/console is Solaris main console)

Сценарий выглядит так:

#!/bin/bash

exec 4>>/tmp/script.log
export PS4='[\D{%FT%TZ}] $(tty): ${BASH_SOURCE}:${LINENO}:    ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
export BASH_XTRACEFD=4
set -o xtrace

export TERM=xterm-color

file=/path/to/big/file
less -MQEX ${file}
read

В env 1 все работает правильно, я могу контролировать меньше и прокручивать вверх / вниз, выходить и т.д. В env 2 меньше отображает только первую часть файла и выходит без возможности прокрутки вверх / вниз или манипулирования внутри файла. env 2 - это скрипт, который запускается из манифеста SMF. Вещи, которые я пробовал:

  1. играть с различными вариантами bash (интерактивные и неинтерактивные), но это не имеет никакого влияния на это. В обеих средах у меня есть следующие опции bash ($ -) set "hxB".

  2. установка разных типов TERM не влияла на меньшее поведение. Я пробовал "xterm", "vt100" и "vt220".

Я не уверен, что еще я должен попробовать или где искать. Как мне продолжить отладку меньшего поведения? Любые советы приветствуются.

1 ответ1

0

Если это действительно консоль Solaris , она не совместима с xterm (или чем-то связанным с VT100). VT100 используют escape-последовательность для прокрутки, которая делает интересные вещи с оборудованием Sun.

Обращаясь к странице справочника по wscons, все, что помечено "SUN" в названии в скобках, в значительной степени гарантированно является точкой несовместимости. Как и элементы управления прокруткой VT100, это управляющие последовательности, не входящие в «ANSI X3.64» (давно снятые, заменены на ECMA-48). Источник вашей проблемы это:

ESC[#r Набор прокрутки (SUNSCRL)

Принимает один параметр, n (по умолчанию 0). Устанавливает в n внутренний регистр, который определяет, сколько строк прокручивает экран, когда функция перевода строки выполняется с курсором в нижней строке. Параметр 2 или 3 вводит небольшое количество прыжка, когда происходит прокрутка. Параметр 34 очищает экран вместо прокрутки. Начальная настройка - 1 при сбросе.

Нулевой параметр запускает режим обтекания вместо прокрутки. Если перевод строки происходит в нижней строке во время режима переноса, курсор перемещается в ту же позицию символа в верхней строке экрана. Когда происходит перевод строки, строка, на которую перемещается курсор, очищается и прокрутка не происходит. ESC [ 1 r возвращает обратно в режим прокрутки.

Для получения дополнительной информации см. Описание функции управления переводом строки (CTRL-J) выше.

CSR в стиле VT100 (изменить область прокрутки) принимает два параметра, которые являются начальной и конечной строками области прокрутки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .