Solía trabajar para una empresa que tenía un shell personalizado para la administración de uno de sus productos que se ejecutaba en Linux y estoy buscando replicar una característica clave de este shell.
Todo el trabajo se realizó mediante un proceso en segundo plano y la salida del registro se mostró a todos los usuarios conectados.
El registro se colará en el fondo a su shell, y la línea de aviso siempre permanecerá perfectamente en la parte inferior.
Por ej.
Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #
La forma en que intenté hacer esto con bash fue iniciar una cola separada en el archivo .bashrc de los usuarios, pero cuando el resultado del comando se envía a stdout, aparece bajo el indicador de bash, por ejemplo
![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3
Y el usuario tendría que presionar enter o CtrlCpara una línea de solicitud limpia.
No tengo ideas sobre cómo hacer que el mensaje siempre salte al final de la salida y creo que estoy usando la terminología incorrecta para encontrar algo en Google, ya que no tengo suerte. ¿Alguien sabe cómo hacer esto? con bash?
tail -f
salida y la solicitud y la salida del comando cuando ingresa un comando que tiene una cantidad significativa de salida, especialmente cuando su proceso en segundo plano está enviando activamente su salida?Respuestas:
Lo siguiente hace lo que necesita, sin usar tmux o screen u otros programas. Mantiene el aviso en la parte inferior. Reemplace "/ var / log / cron" con el archivo que necesite:
La clave para esto son los caracteres de control ANSI para el terminal. Particularmente la declaración "\ e [x; y" que establece una nueva área desplazable. Entonces, a medida que se lee cada línea del archivo de registro, la línea inferior de la ventana se excluye del área desplazable, se inserta la línea del archivo de registro y luego se vuelve a agregar la parte inferior.
fuente
La respuesta es screen o tmux se ha utilizado
Explicaré cómo puedes configurarlo usando la pantalla
1) Instale la pantalla usando
apt-get install screen
Ubuntu / Debian oyum install screen
derivados de RedHat.2)
screen -S shell_and_logs
3) Luego presione Ctrl+ a, seguido de
S
(S mayúscula).Aparecerá una pantalla horizontal.
4) Presione Ctrl+ aseguido de TAB
Esto saltará a la segunda ventana dividida.
5) Cree otra ventana aquí para obtener el símbolo del sistema presionando Ctrl+ asuelte las teclas y luego presione
c
6) Puede cambiar el tamaño de la segunda ventana presionando Ctrl+ y aluego escribiendo,
:resize
después de lo cualLines:
aparecerá. Ingrese el número de líneas que desea mostrar.7) Finalmente puedes cambiar entre ventanas por Ctrl+ aseguido deTAB
fuente
tail -F /var/log/messages &
es otra forma de mostrarle mensajes cuando algo cambia, por ejemplo, cuando se descubre un error de inicio de sesión o cuando algún servicio tiene problemas. Sin embargo, esto no es ideal ya que ensuciará su shell interactivo.screen
ytmux
eso puede hacer esto, por ejemplo, algunos de los BSD se envían con unwindow
comando. Sin embargo, dada la opción, recomendaría esta solución sobre un shell personalizado u otras opciones disponibles debido a su flexibilidad. Puede que no sea tan transparente para el usuario final, pero realmente no notarán la diferencia, y los usuarios avanzados / administradores de sistemas podrán usar la flexibilidad adicional que ofrecenscreen
.t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"
Póngalo en un script y ejecútelo cada vez que lo desee. Gracias a geirha por esto en #bash @ irc.freenode.org