Comment lancer une commande Unix screen avec une commande?

Selon docs pour la commande Unix "screen", vous pouvez le configurer dans .screenrc pour commencer avec un tas d'écrans par défaut, chacun exécutant une commande que vous spécifiez.

Voici ma cofig:

# Default screens
screen -t "shell_0"  1
screen -t "autotest" 2 cd ~/project/contactdb ; autotest

il n'exécute pas la commande autotest. Cette fenêtre, où j'essaie de l'exécuter autotest se ferme instantanément quand je start screen.

j'ai aussi essayé avec juste...

screen -t "autotest" 2 cd ~/project/contactdb

Même résultat.

j'ai aussi éprouvé...

screen -t "autotest" 2 ls

Même résultat.

Quel est le secret pour la faire exécuter une commande dans un écran de démarrage?

24
demandé sur Drew Stephens 2009-02-13 01:24:50

6 réponses

votre programme est lancé (enfin, sauf le cd), c'est juste qu'il est lancé sans shell parent, donc dès qu'il est terminé, il sort et vous avez terminé.

Tu pourrais faire:

screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'

produit deux coquillages, mais la vie continuera probablement.

21
répondu chaos 2009-02-12 22:31:23

essaye ceci:

$ screen -S 'tailf messages' -d -m tailf /var/log/messages

Puis, plus tard, vous pouvez faire:

$ screen -ls
1234.tailf messages

suivi de:

$screen -r 1234
15
répondu sodamnmad 2014-09-04 04:29:54

cela pourrait vous aider, mais ce n'est peut-être pas tout à fait ce que vous voulez.

mettez " zombie az "ou" defzombie az " comme première ligne de votre .screenrc. "az" peut être ce que vous voulez. Maintenant, quand un écran doit fermer (la commande finished executing, par exemple), il ne se fermera pas; frapper 'a' le fermera, frapper 'z' ré-exécutera la commande attachée à cet écran.

j'ai trouvé ça chez l'écran manuel de l'utilisateur.

7
répondu Otis 2009-02-12 22:59:59

Vous pouvez aussi les "trucs" de caractères dans l'écran, comme si vous les tapiez.

Voici comment vous pouvez le faire avec votre exemple:


screen -t "shell_0"  1

# create the following screen in the desired dir, instead of cd-ing afterwards :)
chdir ~/project/contactdb
screen -t "autotest" 2

# (without this sometimes screens fail to start correctly for me)
sleep 5

# paste some text into screen number 2:
select 2
stuff "autotest2"
5
répondu Jamie Flournoy 2009-06-15 23:10:45

Voici comment le mien ressemble. Il semble bien fonctionner. Je pense que soit la parenthèse pourrait être la cause du problème ou l'écran ne va pas ouvrir une fenêtre si la commande "autotest" n'existe pas.

screen -t zsh 1
screen -t emacs 2 emacs -nw
screen -t mutt 3 mutt
monitor on
screen -t mc 4 mc -s
screen -t elinks 4 elinks
4
répondu 2009-02-12 23:21:55

Voici comment je ferais.

screen -t shell_0
chdir ~/project/contactdb
screen -t autotest autotest

ce qui précède semble être évalué sur le plan de la procédure par écran. Nous avons d'abord établir un nouvel écran avec le titre shell_0. Depuis nous n'avons pas donné d'autres options, répertoire de travail courant du shell parent ou le répertoire home de l'utilisateur. Nous définissons ensuite le répertoire par défaut pour les nouveaux écrans à ~/project/contactdb. Ensuite, nous établissons un nouvel écran qui exécute le autotest la commande.

numéro de la fenêtre (n) est facultative, en général, je omettre il.

0
répondu Adam Monsen 2012-12-20 18:59:33