Vários ambientes e comportamento menos estranho

2

Estou jogando com redirecionamento de E / S e tenho problema com menos comportamento em dois ambientes. Ambos os ambientes são baseados em Solaris e são da mesma versão.

Estou executando o programa em dois ambientes como este:

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)

O script é assim:

#!/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

Em env 1 tudo funciona corretamente, eu sou capaz de controlar menos e rolar para cima / para baixo, sair etc. Em env 2, menos exibe apenas a primeira parte do arquivo e sai sem poder rolar para cima / para baixo ou manipular dentro o arquivo. env 2 é um script, que é executado a partir do manifesto SMF. As coisas que tentei:

  1. brinca com várias opções bash (interativas vs não interativas), mas não tem nenhuma influência sobre isso. Nos dois ambientes eu tenho as seguintes opções bash ($ -) set "hxB".

  2. definindo diferentes tipos de TERM não afetou menos o comportamento. Eu tentei "xterm", "vt100" e "vt220".

Não sei o que mais devo tentar ou onde procurar. Como devo proceder com a depuração de menos comportamento? Qualquer sugestão é apreciada.

    
por lessbehaviour 19.10.2015 / 21:41

1 resposta

0

Se realmente for um console do Solaris , ele não é compatível com xterm (ou qualquer coisa relacionado a um VT100). Os VT100s usam uma seqüência de escape para rolagem que faz coisas interessantes com o hardware da Sun.

Referindo-se à página de manual para wscons , nada que está marcado com "SUN" no nome entre parênteses é praticamente garantido como um ponto de incompatibilidade. Como os controles de rolagem do VT100, estas são seqüências de escape que não fazem parte do "ANSI X3.64" ( há muito tempo retirado, substituído por ECMA-48 ). A fonte do seu problema é esta:

ESC[#r Set Scrolling (SUNSCRL)

Takes one parameter, n (default 0). Sets to n an internal register which determines how many lines the screen scrolls up when a line-feed function is performed with the cursor on the bottom line. A parameter of 2 or 3 introduces a small amount of jump when a scroll occurs. A parameter of 34 clears the screen rather than scrolling. The initial setting is 1 on reset.

A parameter of zero initiates wrap mode instead of scrolling. If a linefeed occurs on the bottom line during wrap mode, the cursor goes to the same character position in the top line of the screen. When a line feed occurs, the line that the cursor moves to is cleared and no scrolling occurs. ESC [ 1 r exits back to scroll mode.

For more information, see the description of the Line-feed (CTRL-J) control function above.

Um CSR no estilo VT100 (alterar a região de rolagem) usa dois parâmetros, que são as linhas inicial e final da região de rolagem.

    
por 19.10.2015 / 22:58