web-dev-qa-db-fra.com

Comment démarrez-vous la commande d'écran Unix avec une commande?

Selon les docs de la commande "screen" Unix , vous pouvez le configurer dans .screenrc pour qu'il démarre avec un groupe d'écrans par défaut, chacun exécutant une commande que vous spécifiez.

Voici mon cofig:

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

Il n'exécutera pas la commande autotest. La fenêtre dans laquelle j'essaie de courir autotest se ferme instantanément lorsque je commence screen.

J'ai aussi essayé avec juste ...

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

Même résultat.

J'ai aussi essayé ...

screen -t "autotest" 2 ls

Même résultat là aussi.

Quel est le secret pour lui permettre d'exécuter une commande dans un écran donné au démarrage?

24
Ethan

Votre programme est en cours d’exécution (à l’exception du CD), il est simplement exécuté sans shell parent. Ainsi, dès qu’il est terminé, il se ferme et vous avez terminé.

Vous pourriez faire:

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

Fraye deux coquilles, mais la vie continuera probablement.

21
chaos

Essaye ça:

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

Ensuite, vous pouvez faire plus tard:

$ screen -ls
1234.tailf messages

Suivi par:

$screen -r 1234
15
sodamnmad

Cela peut aider mais peut ne pas être tout à fait ce que vous voulez.

Mettez "zombie az" ou "defzombie z" en première ligne de votre .screenrc. "az" peut être ce que vous voulez comme 2 clés. Maintenant, lorsqu'un écran doit se fermer (la commande a fini de s'exécuter, par exemple), il ne ferme pas réellement; frapper 'a' le fermera, frapper 'z' pour ré-exécuter la commande attachée à cet écran.

J'ai trouvé cela dans le manuel de l'utilisateur de l'écran .

7
Otis

Vous pouvez également "insérer" des caractères dans l'écran comme si vous les aviez tapés.

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 "autotest\012"
5
Jamie Flournoy

Voici à quoi ressemble le mien. Cela semble marcher correctement. Je pense que la parenthèse est peut-être à l'origine du problème ou que l'écran n'ouvre pas de 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
Joe Calimari

Voici comment je le ferais.

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

Ce qui précède semble être évalué de manière procédurale à l’écran. Premièrement, nous établissons un nouvel écran avec le titre Shell_0. Comme nous n’avons donné aucune autre option, le répertoire de travail actuel sera celui du shell parent ou le répertoire de base de l’utilisateur. Nous définissons ensuite le répertoire par défaut pour les nouveaux écrans sur ~/project/contactdb. Ensuite, nous établissons un nouvel écran exécutant la commande autotest.

Le numéro de fenêtre (n) est facultatif, je l'omets généralement.

0
Adam Monsen