Comment démarrer une commande d’écran Unix avec une commande?

Selon la documentation de la commande “screen” Unix , vous pouvez la configurer dans .screenrc pour démarrer 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 d’autotest. La fenêtre où j’essaie de lancer l’ autotest se ferme instantanément lorsque je lance l’ screen .

Je l’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 le faire exécuter une commande sur un écran donné au démarrage?

Votre programme est en cours d’exécution (sauf le cd), c’est juste qu’il est exécuté sans shell parent, donc 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' 

Génère deux coquilles, mais la vie continuera probablement.

Essaye ça:

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

Ensuite, vous pouvez faire:

 $ screen -ls 1234.tailf messages 

Suivi par:

 $screen -r 1234 

Cela peut aider mais 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 n’importe laquelle des 2 clés que vous souhaitez. Maintenant, lorsqu’un écran doit se fermer (commande terminée par exemple), il ne se fermera pas réellement; Si vous appuyez sur “a”, vous la fermez, appuyez sur “z” pour ré-exécuter la commande attachée à cet écran.

Je l’ai trouvé dans le manuel de l’utilisateur de l’écran .

Vous pouvez également “fourrer” 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" 

Voici à quoi ressemble ma mine. Cela semble marcher correctement. Je pense que la parenthèse 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 

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 par écran. Nous établissons d’abord un nouvel écran avec le titre shell_0 . Comme nous n’avons pas donné d’autres options, le répertoire de travail actuel sera celui du shell parent ou du répertoire de base de l’utilisateur. Nous définissons ensuite le répertoire par défaut des 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.