Esegui un programma con la schermata GNU e subito dopo lo stacchi


27

Sto cercando di capire come scrivere uno script che avvierebbe il programma (i) nelle sessioni di GNU Screen all'avvio del sistema. Sto provando questo:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

ma il comando non può essere eseguito perché la sessione è già staccata? L'unica cosa di cui ho bisogno è eseguire il comando nella sessione dello schermo e staccare immediatamente questa sessione.

Grazie per le risposte, ma ora ho affrontato un altro problema. Lo script smette di funzionare dopo aver inserito alcune variabili per il mio "programma e programma2". Qualcosa come questo:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

per qualche motivo "-f config.cfg" è stato ignorato. Ho anche provato a citare il comando e non aiuta troppo.


Perché l' -Xopzione?
enzotib,

Risposte:


34

Intendevi davvero mettere \la fine della linea? Altrimenti prova a rimuoverli: sfuggono al seguente personaggio.

inoltre, l'eliminazione dell'aiuto -Xaiuta l'installazione a funzionare per me, ad esempio:

screen -S test -d -m -X touch /tmp/test

fallisce No screen session found, tuttavia:

screen -S test -d -m touch /tmp/test

funziona bene. In quanto tale, sospetto che per te funzionerà:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Ricorda che se lo esegui all'avvio, $ HOME non è lo stesso che dopo aver effettuato l'accesso come utente specifico. Se è necessario eseguirlo come un determinato utente, è necessario utilizzare suMi piace per eseguirlo come tale utente e specificare il percorso completo rimuoverà qualsiasi ambiguità:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Oppure, chiameresti l'intero script sopra come su - username /path/to/your/script.


Grazie per le risposte, ma ora ho affrontato un altro problema. Lo script smette di funzionare dopo che ho inserito alcune variabili per il mio "programma e programma2"
TbMa,

Questo: screen -S test -d -m $HOME/folder/folder/.programfa quasi esattamente quello che sto cercando, tranne se la cartella / .program è terminata, la sessione dello schermo si chiude automaticamente. C'è un modo per mantenere la sessione dello schermo (shell) in esecuzione anche dopo che il programma è terminato? Forse invece di eseguire il programma esclusivamente, avviare una shell che avvia il programma e quindi ritorna al prompt della shell, o qualcosa del genere?
RocketNuts

4

Come citato Cry Havok, è possibile posizionare il programma direttamente dalla riga di comando.

Se devi davvero usare l'opzione -X, a) devi specificare il comando 'screen' eb) la sessione deve esistere prima.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

Se si mette il programma sulla riga di comando, la schermata si chiude alla chiusura del programma; Non vedo un flag da riga di comando per tenere aperto lo schermo se vuoi vedere l'output della console. Se avvii lo schermo e invii i comandi separatamente, come mostrato qui, potresti aver bisogno di sleepcomandi espliciti per dare allo schermo il tempo di iniziare la sessione prima di inviare il comando.
Chinasaur,

Questa risposta è molto simile alla risposta stackoverflow.com che risponde a una domanda simile . Preferisco questa risposta più di @CryHavok perché questa risposta esegue il tuo programma all'interno della shell predefinita dell'utente (@CryHavok esegue il tuo programma senza una shell genitore, quindi quando il programma muore o lo fai ctrl-c la sessione dello schermo viene immediatamente chiusa)
Trevor Boyd Smith,
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.