66 votes

Éviter la fermeture de gnome-terminal après l'exécution de script ?

J'ai créé un script bash qui ouvre plusieurs terminaux gnome, se connecte aux ordinateurs de la classe via ssh et exécute un script.

Comment éviter que le terminal gnome se ferme après que le script soit terminé ? Notez que je veux aussi pouvoir entrer d'autres commandes dans le terminal.

Voici un exemple de mon code :

gnome-terminal -e "ssh root@<ip> cd /tmp && ls"

0 votes

0 votes

94voto

lesmana Points 8125

Si je comprends bien, vous voulez que gnome-terminal s'ouvre, qu'il exécute quelques commandes, puis qu'il revienne à l'invite pour que vous puissiez entrer d'autres commandes. Gnome-terminal n'est pas conçu pour ce cas d'utilisation, mais il existe des solutions de contournement :

Laissez gnome-terminal exécuter bash et dites à bash d'exécuter vos commandes, puis exécutez bash.

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

El exec bash à la fin est nécessaire car bash -c se terminera une fois que les commandes auront été effectuées. exec fait en sorte que le processus en cours soit remplacé par le nouveau processus, sinon vous aurez deux processus bash en cours d'exécution.

Laisser gnome-terminal exécuter bash avec une préparation rcfile qui exécute vos commandes

Préparer somercfile :

source ~/.bashrc
echo foo
echo bar

Alors cours :

$ gnome-terminal -e "bash --rcfile somercfile"

Laissez gnome-terminal exécuter un script qui exécute vos commandes puis passe à bash.

Préparer scripttobash :

#!/bin/sh
echo foo
echo bar
exec bash

Définir ce fichier comme exécutable.

Alors cours :

$ gnome-terminal -e "./scripttobash"

Vous pouvez également faire un genericscripttobash :

#!/bin/sh
for command in "$@"; do
  $command
done
exec bash

Alors cours :

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""

Chaque méthode a ses particularités. Il faut choisir, mais choisir avec sagesse. J'aime la première solution pour sa verbosité et sa simplicité.

Tout cela dit, ceci pourrait vous être utile : http://www.linux.com/archive/feature/151340

0 votes

Il convient de noter que le rcfile permet d'exécuter des commandes après le fichier `.bashrc` est sourcé, alors qu'aucune des autres options ne vous permet de le faire.

0 votes

Bien que ce soit fou après coup, je suis heureux d'être tombé sur ce post. J'ai un script qui a utilisé la méthode "Hold" dans le profil, et les idiots n'arrêtent pas de cliquer sur le bouton de relance qui s'affiche et qui cause des problèmes !

15voto

l0co Points 614

Enfin, celui-ci fonctionne pour moi :

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"

11voto

Gilles Points 37537
  • Réponse de Stack Overflow : le terminal se ferme lorsque la commande exécutée à l'intérieur est terminée, vous devez donc écrire une commande qui ne se termine pas immédiatement. Par exemple, pour laisser la fenêtre du terminal ouverte jusqu'à ce que vous appuyiez sur Enter en elle :

    gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"
  • Super utilisateur réponse : Créez un profil dans lequel la préférence "Titre et commande/Quand la commande sort" est définie sur "Maintenir le terminal ouvert". Appelez gnome-terminal avec la commande --window-with-profile o --tab-with-profile pour spécifier le nom du terminal.

1 votes

Cette idée m'aide mais ne fait pas ce que je veux. Je vais exécuter certaines commandes dans le terminal automatiquement comme décrit ci-dessus. Après l'exécution, je pourrai entrer certaines commandes à la main. Dans le passé j'ai fait à la main (copier/coller) : 1. ssh Root@<ip> 2. cd /Root/install && ./WriteImage.sh && InitImage.py 3. <quelques autres commandes à la main> La ligne 2. J'ai copié à la main sur 20 terminaux pour 20 ordinateurs. Ne puis-je pas faire l'étape 1. et 2. automatiquement et aussi être capable de saisir d'autres commandes à la main comme à l'étape 3.

1 votes

Le problème avec --window-with-profile' (which opens separate terminals) or --tab-with-profile` (qui ouvre les onglets dans un seul terminal) est qu'une fois que le script finit de s'exécuter dans l'onglet/fenêtre, ou lorsque j'appuie sur Ctrl+c l'onglet/fenêtre se ferme immédiatement. Je ne veux pas qu'elle se ferme. Je veux que l'onglet reste ouvert et affiche l'invite bash afin que je puisse continuer à taper des commandes dans l'invite bash de cet onglet. N'est-ce pas possible d'une manière ou d'une autre ? read line ne fait une pause que pour une entrée utilisateur, et ce n'est pas ce que je recherche. Toute aide serait appréciée.

1 votes

@Nav C'est une question différente : vous voulez laisser le coquille ouvert, pas le terminal. Je suis sûr que cette question a déjà été posée, peut-être sur Super utilisateur o Unix et Linux plutôt que Stack Overflow puisqu'il ne s'agit pas d'un problème de programmation (mais probablement de Stack Overflow aussi de toute façon).

-3voto

NickyP Points 45

Si vous exécutez un script bash, ajoutez simplement gedit afile à la fin du script et cela tiendra gnome-terminal ouvert. "afile" pourrait être un journal de construction, ce qui était le cas pour moi.

Je n'ai pas essayé d'utiliser seulement gedit seul mais, cela fonctionnerait correctement aussi.

-5voto

sourcerebels Points 2872

Utilice nohup commandement.

nohup gnome-terminal -e "ssh root@ cd /tmp && ls"

J'espère que cela vous aidera.

0 votes

La fenêtre se ferme toujours immédiatement.

0 votes

Vous devriez probablement utiliser nohup pour lancer le script principal ?

1 votes

Je ne vois pas comment nohup va aider ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X