2016-02-25 1 views
0

la partie correspondante du code est:Comment déclencher automatiquement plusieurs fenêtres gnome-terminal et les garder ouvertes et actives?

code principal

#.....some code 

send "flag1\r" 
exec gnome-terminal -t "tab1" -x bash "$HOME_PATH/scripts/startTask1.tcl" 
send "flag2\r" 
exec gnome-terminal -t "tab2" -x bash "$HOME_PATH/scripts/startTask2.tcl" 

#.....some code 

startTask1.tcl

#.....some code 
expect "flag for task2 to go" 
send "flag3\r" 
interact 
send "flag4\r" 

#.....some code 

puis je l'ai trouvé, je peux voir les impressions de flag1 et flag3, la fenêtre " tabl "est ouvert, mais la tab2 n'a pas pu être déclenchée.

J'ai essayé de fermer les fenêtres tabl, puis tab2 a été ouvert. Cependant, ce que je veux, c'est garder ces deux fenêtres ouvertes automatiquement.

Ma compréhension est: "interagir" donner le contrôle, alors le prochain terminal devrait être ouvert automatiquement, non?

Je suis de première année sur ce sujet, donc certains mots ci-dessus peuvent ne pas être exact. Très apprécié pour la réponse, merci.

+0

Merci Brian et Donal, le problème est résolu en mettant à jour le système d'exploitation Ubuntu. :) – Jeff

Répondre

0

Votre problème est que le programme externe attend la fin du processus gnome-terminal avant de passer à l'étape suivante. Il se termine lorsque le processus subordonné (attendez-vous je suppose?) Se termine.

Vous pouvez exécuter les deux en même temps en mettant un & comme argument séparé à la fin de la exec:

exec gnome-terminal -t "tab1" -x bash "$HOME_PATH/scripts/startTask1.tcl" & 

Cependant, vous ne serez pas en mesure d'obtenir les deux tâches à collaborer avec facilement de cette façon, car ils utilisent des terminaux virtuels séparés sous les couvertures. En fait, il y aura un terminal virtuel pour chaque gnome-terminal et un autre (au moins) pour chacun des expect.

Je pense que vous devez faire quelques pas en arrière et déterminer ce que vous voulez vraiment faire. Il y a probablement des façons de le faire, mais ils pourraient avoir besoin d'une approche différente de celle que vous utilisez actuellement, qui semble être vouée à l'échec.

+0

Merci Donal, En fait, il y a un "attendre" avant le "interagir" dans le code de "startTask1.tcl", j'ai mis à jour ma question pour le rendre clair.
> L'exigence pour les scripts est: > 1. Exécutez la tâche1, attendez (par expect) jusqu'à ce que des informations de condition préalable soient imprimées dans le terminal Task1, puis donnez le contrôle par "interact"; > 2. Exécutez la tâche2 3.Après les informations de pré-condition dans le terminal Tâche1, Tâche1 et Tâche2 peuvent s'exécuter séparément, sans aucune collaboration entre elles; > Comment faire? – Jeff

0

Je peux me tromper mais je crois que le programme appelé terminator est le seul shell à onglets qui utilise plusieurs coques simultanément. Soyez averti cependant, l'ordre des appels peut sembler simultané mais en réalité ils vont entrer et sortir de la mémoire dans un ordre qui peut placer les choses dans l'espace utilisateur, l'espace noyau, ou l'espace swap, à des intervalles selon l'ordre du script.