GNU/Linux >> Linux Esercitazione >  >> Linux

invio di input di testo a uno schermo separato

Posso risolvere almeno una parte del problema:perché il file stop parte non funziona. Sperimentalmente, quando avvii una sessione Screen in modalità indipendente (screen -d -m ), nessuna finestra è selezionata, quindi l'input è stato successivamente inviato con screen -X stuff è solo perso. Devi specificare esplicitamente che vuoi inviare i tasti premuti alla finestra 0 (-p 0 ). Questa è comunque una buona idea, nel caso in cui ti capiti di creare altre finestre in quella sessione Screen per qualsiasi motivo.

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

(Traduzione dello schermo ^M a control-M che è il carattere inviato da Invio chiave.)

Il problema con l'avvio della sessione da uno script è probabilmente correlato a unMENU.


Innanzitutto, una nota su come inserire facilmente le nuove righe:

Solo un avvertimento che il $() build rimuove le nuove righe dall'output di comando in modo che le righe di output possano essere utilizzate come argomenti per altri programmi. Ciò può causare un comportamento imprevisto. In questo caso presumo che tu stia specificamente cercando di inviare l'equivalente di Invio sequenza di tasti. Mentre il ritorno a capo stai inviando con \r non verrà barrato, ci sono diversi modi più semplici per inserire quel carattere senza la necessità del comando aggiuntivo.

  1. Puoi inserire una nuova riga normale all'interno delle virgolette

    screen -S minecraft -X stuff "stop
    "
    
  2. Oppure puoi inserire il carattere in una riga terminale usando Ctrl +v Invio sequenza. Questo sarà simile a ^M nel terminale, ma è un carattere speciale di nuova riga.

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

In secondo luogo, una nota sul comportamento irregolare dello schermo. (Spiegazione e soluzione di Gilles)

Lo schermo ha un problema con l'accettazione dell'input a una sessione dello schermo che non è mai stata collegata. Se lo esegui, avrà esito negativo:

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

Ma se esegui questo funzionerà:

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

Infine, potresti usare tmux che si comporta molto meglio invece di screen .

GNU-Screen è stato un di fatto multiplexer terminale per molti anni, ma ha smesso da tempo di essere sviluppato e bug e stranezze non vengono risolti. Tmux è in fase di sviluppo attivo, include molte funzionalità che lo schermo non può toccare e il suo comportamento fuori dagli schemi è piuttosto più intuitivo. Inoltre, è meglio documentato. Ecco come convertiresti il ​​tuo codice:

# 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"

Mi scuso per aver recuperato questo vecchio post, ma questo mi avrebbe aiutato nei miei sforzi se queste informazioni fossero state disponibili nel momento in cui ho avuto un problema simile. Ci sono molte domande su come inviare i comandi dello schermo in uno script bash. Come con la scuoiatura dei gatti, questo può essere fatto, ma mi piace così. Con questo puoi inviare qualsiasi comando o dire qualsiasi cosa semplicemente chiamando la funzione 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"
...

Questo è 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. Come funzionano l'input da tastiera e l'output di testo?

  2. Linux:invio di input di testo a uno schermo separato?

  3. Invio di input a una sessione dello schermo dall'esterno?

  4. Schermata Gnu:stampare una sessione separata su Stdout?

  5. Risoluzione dello schermo non elencata?

Come utilizzare Vim Editor per inserire testo ovunque in Linux

Cerca testo sull'output del terminale?

Perché Gnu Screen / Byobu lascia il testo spazzatura nella shell durante una ricerca inversa?

Testo nero spazzatura su schermo bianco su un server?

Come configurare un server Minecraft su CentOS 7

Rinomina la sessione dello schermo