Bash Prompt Abaixo Saída - Background Log Tail

15

Eu costumava trabalhar para uma empresa que tinha um shell personalizado para o gerenciamento de um de seus produtos que estava sendo executado no Linux e estou tentando replicar um recurso importante desse shell.

Todo o trabalho foi feito por um processo em segundo plano e a saída do log exibida para todos os usuários conectados.

O registro seria o segundo plano do seu shell, e a linha de prompt sempre ficaria perfeitamente na parte inferior.

Por exemplo,

Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #

A maneira como tentei fazer isso com o bash foi iniciar uma cauda desanexada no arquivo .bashrc dos usuários, mas quando a saída do comando é enviada para stdout - ela aparece no prompt do bash, por exemplo.

![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3

E o usuário teria que pressionar enter ou Ctrl C para uma linha de prompt limpa.

Estou sem ideias de como fazer com que o prompt sempre atinja a parte inferior da saída e acho que estou usando a terminologia errada para encontrar algo no Google, pois não estou tendo sorte. Alguém sabe como fazer isso com bash?

    
por iamacarpet 06.08.2013 / 12:40

2 respostas

1

O seguinte faz o que você precisa, sem usar o tmux ou a tela ou outros programas. Mantém o prompt na parte inferior. Substitua "/ var / log / cron" com o arquivo que você precisa:

#!/bin/bash 
L=$(tput lines)
L1=${L}
(( L1-- ))
C=$(tput cols)
tput cup ${L} 0
tail -f /var/log/cron | while read line; do 
  tput sc
  printf "\e[1;${L1}r\e[${L1};${C}f" 
  echo; echo ${line}
  printf "\e[1;${L}r" && tput rc
done

a chave para isso são os caracteres de controle ANSI para o terminal. Particularmente a instrução "\ e [x; y" que define uma nova área rolável. Portanto, como cada linha do arquivo de log é lida, a linha inferior da janela é excluída da área de rolagem, a linha do arquivo de log é inserida e, em seguida, a parte inferior é incluída novamente.

    
por 13.09.2013 / 13:39
11

A resposta é screen ou o tmux está sendo usado

Vou explicar como você pode configurar essa tela usando

1) Instale a tela usando apt-get install screen no Ubuntu / Debian ou yum install screen RedHat derivados.

2) screen -S shell_and_logs

3) Em seguida, pressione Ctrl + a , seguido de S (maiúscula S).
Uma tela horizontal aparecerá

4) Pressione Ctrl + a seguido de TAB
Isso irá pular para a segunda janela dividida.

5) Crie outra janela aqui para obter o prompt de comando pressionando Ctrl + a solte as teclas e pressione c

6) Você pode redimensionar o segundo windo pressionando Ctrl + a e digitando :resize após o qual Lines: aparecerá. Digite o número de linhas que você deseja mostrar.

7) Finalmente, você pode alternar entre janelas por Ctrl + a seguido por TAB

    
por 06.08.2013 / 13:26