Por que “[ok]” não é mostrado na mensagem de status do daemon ao usar o GNU Screen?

4

Eu tenho um sistema baseado no Debian (Voyage Linux 0.9.1 na verdade, que é baseado no debian wheezy) e quando eu faço /etc/init.d/ntp status ele retorna (por exemplo)

$ /etc/init.d/ntp status
[ ok ] NTP server is running

No entanto, dentro de uma sessão de tela (versão 4.01.00devel 2-May-06), o [ ok ] não é mostrado.

$ screen
$ /etc/init.d/ntp status
NTP server is running

Por que isso acontece? E como mostrá-lo também na sessão Screen?

BTW: Em outro servidor debian (que também retorna xterm-256color quando eu faço echo $TERM ), notei que /etc/init.d/ntp status nunca mostra o [ ok ] , independentemente de eu estar em uma sessão de tela ou não, então provavelmente não é realmente um problema de screen .

    
por Rabarberski 07.08.2013 / 10:44

1 resposta

5

Não requer tela. Vamos experimentar:

TERM=dumb /etc/init.d/ntp status  # no [OK]
/etc/init.d/ntp status | cat      # also no [OK]

Isso também deixa de fora o [OK] . Já que a saída difere com base na configuração TERM ( dumb e screen dropam o [OK] ), você pode fingir que tem um terminal completo em vez de tela:

TERM=xterm /etc/init.d/ntp status

E parece detectar também se está conectado a um terminal. Quando você canaliza a saída para outro processo, o [OK] desaparece.

Suponho que a razão para isso é que, devido ao uso de códigos de escape para o [OK] , existe uma verificação que impede seu uso em ambientes "não-salvos". As sequências de escape não adicionam nada, mas podem atrapalhar a saída.

A verificação da capacidade do terminal é feita em /lib/lsb/init-functions . Existe uma função chamada log_use_fancy_output que faz uso de tput :

tput The tput utility uses the terminfo database to make the values of terminal-dependent capabilities and information available to the shell

Emite os dois comandos a seguir:

tput hpa 60
tput setaf 1

De tput: Controle de terminal portátil e Bash Prompt HOWTO - Movimento de Cores e Cursores :

hpa          - Move cursor to column #1
setaf [1-7]  - Set a foreground colour using ANSI escape

Em particular, log_use_fancy_output verifica se está conectado a um terminal. Em seguida, ele verifica se TERM está vazio ou configurado como mudo e se essas duas operações tput são bem-sucedidas. Se isso for bem-sucedido, o [OK] será impresso, caso contrário, o [OK] será ignorado.

    
por 07.08.2013 / 11:46