He estado buscando para encontrar una manera de enviar un comando a una sesión de pantalla separada. Hasta aquí todo bien. Esto es lo que se me ocurrió:
$ screen -S test -p 0 -X stuff 'command\n'
Este comando funciona como debería. Pero, también me gustaría que la salida se repitiera directamente frente a mis ojos (no es necesario un .log
archivo o algo, solo quiero la salida).
Usar el screen -L
comando no es una opción.
linux
ubuntu
gnu-screen
Robin
fuente
fuente
screen
? ¿No es para esto que están hechos los procesos secundarios?Respuestas:
Use una tubería de primero en entrar, primero en salir:
Use un operador de redireccionamiento. Redireccione la salida del comando a / tmp / test, por ejemplo, así:
Luego en otro caparazón
Tenga en cuenta que también es posible que desee redirigir los mensajes de error utilizando el operador 2> & 1 .
Ejemplo
Como se solicitó en los comentarios, supongamos que tenemos un script php que acepta la entrada del usuario e imprime la carga del servidor en la entrada de "estado":
Creas dos fifos:
Llamas a una pantalla:
En otra consola, llamémosla consola 2, encontrará el nombre de su pantalla:
En la consola 2, envía el comando a la pantalla:
verá el comando que aparece en la pantalla. Ahora en la consola 2 puede enviar comandos a su proceso php:
y lee de ella:
fuente
Tengo un script de Python que realiza un seguimiento de numerosas sesiones de pantalla separadas y captura la salida de cada una (cuando los comandos de utilización como free, top -bn2, iostat se envían periódicamente a través de 'cosas').
En lugar de redirigir a un archivo y, por lo tanto, administrar al menos un archivo por sesión de pantalla separada ... Simplemente redirijo a cualquier tty / pts que esté utilizando mi sesión principal.
Paso # 1: Comience una nueva sesión de pantalla (con un nombre legible por humanos) en modo separado.
Paso # 2: envíe sus comandos (usaré el comando 'free -g' junto con 'uname -r') a través de cosas. Es importante especificar la ventana que desea usar (en nuestro caso, la primera y única ventana) con -p.
Paso # 3: El paso anterior solo envía el texto del comando. También debemos enviar un retorno de carro a esta sesión de pantalla separada para que el shell ejecute nuestro comando. El carácter ASCII 015 es un retorno de carro en la mayoría de los sistemas * nix.
Paso 4: redirige la salida de nuestra sesión de pantalla separada a nuestro tty / pts actual:
El resultado del Paso 4 se verá más o menos así:
Aunque esto parece un poco complicado, el proceso es fácilmente programable. Con python, puedo analizar el resultado del Paso # 4 y capturar solo los datos que me interesan.
Al elegir un escenario simple como obtener detalles de IP, escribí un script de ejemplo para demostrar los conceptos anteriores. Siéntase libre de reemplazar y retocar como mejor le parezca.
Ejemplo de secuencia de comandos de Python para obtener detalles de IP de una sesión de pantalla separada:
Guión anterior en acción:
fuente
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
para trabajar aún mejor en ese escenario.Ejemplo:
fuente