Schermo GNU: non è possibile inviare comandi a meno che lo schermo non sia collegato?


10

Ho il seguente script

screen -d -m -S $1                #start screen minimized
screen -S $1 -X stuff "$beast     
"                                 #stuff commands

a meno che non allego prima lo schermo sembra che gli effetti delle cose non facciano nulla? Perché è questo e come posso modificare questo script in modo da non dover collegare lo schermo?

Risposte:


14

Quando si avvia una sessione dello schermo in modalità staccata ( screen -d -m), non viene selezionata alcuna finestra, pertanto l'input inviato successivamente screen -X stuffviene perso. È necessario specificare esplicitamente che si desidera inviare i tasti alla finestra 0 ( -p 0). Questa è comunque una buona idea, nel caso in cui ti capiti di creare altre finestre in quella sessione dello schermo per qualunque motivo.

screen -S "$1" -p 0 -X stuff "$beast$(printf \\r)"

( printf \\rper emulare rigorosamente la Returnchiave; molti ma non tutti i programmi accettano una nuova riga ( \n).)


Grazie! funziona perfettamente. Scusate tutti per essere fuori tema
dukevin il

Non funziona per me.
Tanner Strunk,

2

Questo è emerso di recente mentre cercavo di rispondere a una domanda su unix.stackexchange.com .

Il riassunto è che lo schermo non ha una finestra selezionata per impostazione predefinita a meno che tu non attacca, ma Gilles ci ha mostrato come puoi forzarne la selezione aggiungendo l'argomento -p 0al tuo comando schermo.

Personalmente consiglio di passare a tmux. Ecco come eseguire il porting dei comandi dello schermo per funzionare in tmux:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.