invia il comando a una sessione dello schermo già in esecuzione


11

Ho cercato di inviare comandi a una sessione dello schermo gnu in esecuzione (4.00.03) in opensolaris, ma non riesco a farlo eseguire alcun comando attraverso alcuna combinazione di screen -X

Ok, inizio una sessione con lo schermo screen -S teste poi ho provato a screen -r -X "date"mostrarmi la data in cui mi sarei riconnesso. Ma non si è verificato alcun messaggio di errore né output nella schermata. Ho provato con così tante combinazioni, che non riesco nemmeno a ricordare.

Qualche suggerimento su come realizzarlo?

Il motivo per cui lo sto facendo è perché ho un programma, che non è un demone, e desidero avviarlo in una sessione di schermate, in modo da poter vedere in seguito cosa sta succedendo.


1
sembra che questo "comando" di cui stanno parlando nelle pagine man sia pensato per un comando sullo schermo, come le impostazioni per la stessa sessione dello schermo. Invece di inviare comandi per la shell, che viene aperta nella sessione dello schermo. Quindi, qualcuno ha un'idea di come farlo accadere con uno script bash ??

@Axon: Sì, -X invia i comandi dello schermo, non i comandi della shell, ma lo schermo ha un comando 'schermo' che può aprire nuove finestre dello schermo.

Risposte:


18

In realtà è abbastanza semplice. È possibile utilizzare quanto segue:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'emula premendo il Entertasto.

NOTA: "roba" è un comando a schermo. http://www.gnu.org/software/screen/manual/screen.html#Stuff


Potresti specificare quale "roba" rappresenta? È un nome ... o un comando ... o altri parametri?
Cerin,

Funziona in effetti, ma non direi che è semplicemente comunque;) Questo è qualcosa come passare eventi premuti e passare la nuova riga sullo schermo. Non c'è solo il normale comando di esecuzione dello schermo ...?
Ducin,

@Cecin: stuffè un comando su schermo per "riempire" una stringa in stdin
konrad

Questo è molto buono, ma per qualche motivo non funziona con "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'", perché?
e271p314,

questo non funziona se non eseguo il comando due volte ... e su righe di comando separate ... se non faccio screen -d -m -S sessionname; screen -S sessionname -X [...]mai niente funzionerà (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...], non fa nulla se non creare una nuova sessione di schermo che non fa nulla. votazione verso il basso
user3338098

5

Sembra che tu voglia:

$ screen -S test -d -m -c / dev / null - sh -c 'data; exec $ SHELL '

-S test: dai un nome a questa sessione
-d -m: schermata di avvio staccata
-c / dev / null: ignora ~ / .screenrc (fornisce un file diverso o rilascia questa opzione,
  come necessario)
-: opzioni di fine schermo
sh -c 'data; exec $ SHELL ': comando per l'esecuzione dello schermo, notare che se questo comando
  era solo 'data' quindi lo schermo sarebbe uscito immediatamente. se non vuoi uscire
  schermo dopo la chiusura del comando, quindi è possibile utilizzare:
    $ screen -S test -d -m -c / dev / null - il tuo comando qui

O forse vuoi solo dtach .


L'esecuzione di questo non porta a nulla. Nessun messaggio di errore o di successo, ma screen -listmostra che nessuna sessione è aperta.
Cerin,

Questa risposta ha funzionato per me. La chiave era il - per terminare le opzioni dello schermo.
Plazgoth,

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Aprire una nuova finestra (con il titolo titolo ) in una sessione di nome esistente session_name , ed eseguire shell_command (con argomenti opzionali args )

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.