Eu trabalhava para uma empresa que possuía um shell personalizado para gerenciamento de um de seus produtos em execução no Linux e pretendo replicar um recurso essencial desse shell.
Todo o trabalho foi realizado por um processo em segundo plano e a saída do log exibida para todos os usuários conectados.
O log seria direcionado em segundo plano para o seu shell, e a linha de prompt sempre permaneceria 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 era iniciar uma cauda desanexada no arquivo .bashrc dos usuários, mas quando a saída do comando é enviada para o 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 CtrlCpara obter uma linha de prompt limpa.
Estou sem ideias de como fazer com que o prompt sempre pule para o final da saída e acho que estou usando a terminologia errada para encontrar qualquer coisa no Google, pois não estou tendo sorte - alguém sabe como fazer isso com festança?
tail -f
saída e o prompt e a saída do comando quando você insere um comando com uma quantidade significativa de saída, especialmente quando o processo em segundo plano está enviando ativamente sua saída?Respostas:
A seguir, você faz o que precisa, sem usar o tmux, o screen ou outros programas. Mantém o prompt na parte inferior. Substitua "/ var / log / cron" pelo arquivo que você precisar:
a chave para isso são os caracteres de controle ANSI do terminal. Particularmente a instrução "\ e [x; y" que define uma nova área rolável. Portanto, à medida que 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 a parte inferior é adicionada novamente.
fonte
A resposta é tela ou tmux está sendo usado
Vou explicar como você pode configurar esse usando a tela
1) Instale a tela usando derivados do
apt-get install screen
Ubuntu / Debian ouyum install screen
RedHat.2)
screen -S shell_and_logs
3) Pressione Ctrl+ a, seguido de
S
(capital S).Uma tela horizontal aparecerá
4) Pressione Ctrl+ aseguido de TAB
Isto pulará para a segunda janela dividida.
5) Crie outra janela aqui para obter o prompt de comando pressionando Ctrl+ asolte as teclas e pressione
c
6) Você pode redimensionar o segundo windo pressionando Ctrl+ ae digitando
:resize
após o queLines:
será exibido. Digite o número de linhas que você deseja mostrar.7) Finalmente, você pode alternar entre janelas por Ctrl+ aseguido porTAB
fonte
tail -F /var/log/messages &
é outra maneira de mostrar mensagens quando algo muda, por exemplo, quando uma falha de login é descoberta ou quando algum serviço tem problemas. No entanto, isso não é o ideal, pois irá danificar seu shell interativo.screen
etmux
que pode fazer isso -, por exemplo, alguns dos BSDs fornecido com umwindow
comando. Dada a opção, porém, eu recomendaria esta solução em um shell personalizado ou em outras opções disponíveis devido à sua flexibilidade. Pode não ser tão transparente para o usuário final, mas eles realmente não sabem a diferença e os usuários avançados / administradores de sistemas poderão usar a flexibilidade extra oferecida porscreen
.t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"
Coloque-o em um script e execute-o sempre que desejar. Graças à geirha para este em #bash @ irc.freenode.org