GNU/Linux >> Tutoriales Linux >  >> Linux

enviar entrada de texto a una pantalla separada

Puedo resolver al menos parte del problema:por qué el stop parte no funciona. Experimentalmente, cuando inicia una sesión de pantalla en modo separado (screen -d -m ), no se selecciona ninguna ventana, por lo que la entrada se envía más tarde con screen -X stuff simplemente se pierde. Debe especificar explícitamente que desea enviar las pulsaciones de teclas a la ventana 0 (-p 0 ). Esta es una buena idea de todos modos, en caso de que cree otras ventanas en esa sesión de pantalla por cualquier motivo.

screen -S minecraft -p 0 -X stuff "stop^M"

(Traducción de pantalla ^M a control-M que es el caracter enviado por Enter clave.)

El problema de iniciar la sesión desde un script probablemente esté relacionado con unMENU.


Primero, una nota sobre cómo ingresar líneas nuevas fácilmente:

Solo un aviso de que el $() build elimina las líneas nuevas de la salida del comando para que las líneas de salida se puedan usar como argumentos para otros programas. Esto puede causar un comportamiento inesperado. En este caso, asumo que está tratando específicamente de enviar el equivalente a Enter pulsación de tecla Mientras que el retorno de carro que está enviando con \r no quedará rayado, hay varias formas más fáciles de ingresar ese carácter sin necesidad de un comando adicional.

  1. Puede colocar una nueva línea regular dentro de sus comillas dobles

    screen -S minecraft -X stuff "stop
    "
    
  2. O puede ingresar el carácter en una línea terminal usando Ctrl +v Entrar secuencia. Esto se verá como ^M en la terminal, pero es un carácter de nueva línea especial.

    screen -S minecraft -X stuff "stop^M"
    

En segundo lugar, una nota sobre el comportamiento errático de la pantalla. (Explicación y solución de Gilles)

La pantalla tiene un problema al aceptar entradas en una sesión de pantalla que nunca se ha adjuntado. Si ejecuta esto, habrá fallado:

screen -d -m -S minecraft zsh
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Pero si ejecutas esto, funcionará:

screen -d -m -S minecraft zsh
screen -r minecraft (then disconnect with Ctrl-a-d)
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Por último, podrías usar el mucho mejor comportamiento tmux en lugar de screen .

GNU-Screen ha sido un de facto multiplexor de terminal durante muchos años, pero hace tiempo que dejó de desarrollarse y los errores y peculiaridades no se solucionan. Tmux está en desarrollo activo, incluye muchas funciones que la pantalla no puede tocar y su comportamiento listo para usar es bastante más intuitivo. Además, está mejor documentado. Así es como convertiría su código:

# Start new detached tmux session with a named window pane running the java app
tmux new-session -d -n minecraft /usr/lib/java/bin/java [args]

# Send it keys to stop the mincraft server
tmux send-keys -t minecraft "stop^M"

Pido disculpas por desenterrar esta publicación anterior, pero esto me habría ayudado en mis esfuerzos si esta información hubiera estado disponible en el momento en que tuve un problema similar. Hay muchas preguntas sobre cómo enviar comandos de pantalla en un script bash. Al igual que con el desollado de gatos, esto se puede hacer, pero me gusta de esta manera. Con esto puedes enviar cualquier comando o decir cualquier cosa simplemente llamando a la función say_this.

#!/bin/bash

say_this()
{
    screen -S minecraft -p 0 -X stuff "$1^M"
}

say_this "say Saving world"
say_this "save-off"
say_this "save-all"
...

¡Esto es con ssh!

#!/bin/bash

say_this()
{
    # Dont forget to set NAME or whatever
    ssh -p 8989 192.168.1.101 screen -S $NAME -p 0 -X stuff \"$1^M\"
}

say_this "say test"
say_this "say [email protected]#$%^&*()<>?This string will work!"

Linux
  1. ¿Cómo funcionan la entrada de teclado y la salida de texto?

  2. ¿Enviar entrada a una sesión de pantalla desde el exterior?

  3. Pantalla Gnu:¿Imprimir una sesión separada en la salida estándar?

  4. ¿Forzar pantalla en blanco e ignorar entrada?

  5. ¿Cómo iniciar en modo de texto verdadero?

Cómo usar Vim Editor para ingresar texto en cualquier lugar en Linux

¿Buscar texto en la salida del terminal?

¿Por qué Gnu Screen / Byobu deja texto basura en el shell durante una búsqueda inversa?

¿Texto negro basura en la pantalla blanca en un servidor?

Cómo configurar un servidor de Minecraft en CentOS 7

Deshabilitar la pantalla en blanco en la consola de texto