Esegui script in una schermata


25

Voglio eseguire uno script bash in uno schermo separato. Lo script chiama un programma alcune volte, ognuna delle quali impiega troppo tempo ad aspettare. Il mio primo pensiero è stato semplicemente quello di aprire una schermata e quindi chiamare lo script, ma sembra che non riesco a staccarmi (da ctrl-a d) mentre lo script è in esecuzione. Quindi ho fatto qualche ricerca e ho trovato queste istruzioni per sostituire lo shebang con il seguente:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Ma non funziona neanche (le opzioni non sono riconosciute). Eventuali suggerimenti?

PS Mi viene subito in mente che screen -dmS name ./script.shprobabilmente funzionerebbe per i miei scopi, ma sono ancora curioso di sapere come incorporarlo nella sceneggiatura. Grazie.

Risposte:


28

La linea shebang che hai visto potrebbe funzionare su alcune varianti unix, ma non su Linux. Le linee di shebang di Linux sono limitate: puoi avere solo un'opzione. L'intera stringa -d -m -S screenName /bin/bashviene passata come singola opzione a screen, anziché essere passata come parole diverse.

Se vuoi eseguire uno script all'interno dello schermo e non scherzare con più file o citazioni, puoi rendere lo script uno script shell che invoca lo schermo se non è già all'interno dello schermo.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

Funziona bene, a cosa serve "$0"qui?
Fabich,

4
@Lordofdark Questo è il nome dello script. Lo script richiama il screenrichiamo /bin/bashche richiama nuovamente lo script.
Gilles 'SO- smetti di essere malvagio' il

16

Secondo le pagine man dello schermo:

  • screen -d -m Schermata iniziale in modalità staccata. Questo crea una nuova sessione ma non si allega ad essa. Questo è utile per gli script di avvio del sistema.
  • -S sessionname Impostare il nome della nuova sessione su sessionname.

Quindi quando ho eseguito il comando che hai fornito: screen -dmS name ./script.sh

Lo schermo avvia una finestra chiamata name ed esegue automaticamente quello script.sh. Per tornare lì per vedere lo stato, digitare semplicemente:screen -r test

Ora con Ubuntu 14.04, i comandi sono leggermente diversi. Provare:

screen -d -m -S test

Ora per eseguire lo script, dovrai andare al loro file di configurazione per farlo:

sudo vim /etc/screenrc

Una volta lì, scorri verso il basso e vedrai:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Questa è la sezione in cui dovrai aggiungere il nome dello script per eseguire e che dovrebbe permetterti di fare tutto ciò di cui hai bisogno dallo schermo.


In qualche modo quel comando ( screen -dmS ...) non funziona per me, anche se dovrebbe davvero. Lo eseguo e quindi screen -lsnon vengono trovati socket. Pensieri?
bongbang,

Quale distro stai usando?
ryekayo,

NAME = "Ubuntu" VERSION = "14.04.1 LTS, Trusty Tahr" Penso. È una macchina virtuale.
Bongbang,

Dammi un po 'perché sto solo lasciando il lavoro e cercherò di usare lo schermo sulla mia macchina che è anche ubuntu 14.04
ryekayo

@bongbang - che versione di schermo hai?
slm

3

Questo è un po 'vecchio ma uno dei pochi thread che ho trovato per farlo. Dopo aver giocato arount l'unico modo per farlo funzionare in modalità distaccata con Ubuntu 14. è

screen -d -m -t nameofwindow sh nameoflaunch.sh

Il lancio sarebbe la seconda parte sopra che ospita gli attuali comandi java e la versione del server. Corro alla vaniglia.

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.