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?
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.
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
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.
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"
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
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.