Comment exécuter un script sans fermer le terminal?


69

J'ai un script dans le fichier bla.shet c'est exécutable. Lorsque je clique dessus, le script est exécuté et la fenêtre est fermée. J'aimerais que la fenêtre reste ouverte .

Quelque chose comme commande cmd /k** commanddans Windows.

PS je ne veux pas utiliser pause, mais je veux pouvoir écrire plus de commandes après l'exécution du script.

Réponses:


81

Mettez $SHELLà la fin de votre script:

texte alternatif

Un petit défaut: comme il gnome-terminalne fonctionne pas en bashtant que shell, il le considérera comme une application et affichera un avertissement à ce sujet lorsque vous essayez de fermer le terminal:

There is still a process running in this terminal
Closing the terminal will kill it.

Je n'ai trouvé aucun moyen de cacher cet avertissement. Si vous le souhaitez, vous pouvez le désactiver entièrement en exécutant:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Cela n'arrive pas si vous utilisez xtermplutôt que gnome-terminal; cela devrait-il vous déranger?


20
Vous pouvez utiliser exec $SHELLau lieu de simplement $SHELLfaire disparaître l'avertissement sans modifier les paramètres.
Andrea Corbellini

1
Mais cette solution crée un shell / processus supplémentaire. Cela peut-il être évité?
lucasvc

Je ne sais pas comment faire cela, non. Le problème est que vous perdez votre traitement sur l'IO standard une fois le premier processus bash terminé. Vous devrez donc vous tromper avec un démon qui transmet ces descripteurs, qui seraient alors plus sujets aux erreurs et plus ennuyeux.
Stefano Palazzo

10

Utiliser le terminal Gnome

L'ajout de gnome-terminal; bash à la fin de la chaîne de commande et l'appel du script avec l'option -c fonctionnent. Par exemple:

gnome-terminal -e "bash -c ~/script.sh;bash"

Cela fait ce qui suit:

  1. ouvre gnome-terminal
  2. exécute le script script.sh
  3. affiche l'invite bash une fois le script terminé.

Vous pouvez quitter la fenêtre de gnome-terminal en la fermant ou en tapant exit à l'invite bash. Ou vous pouvez taper plus de commandes à la demande.



7

Si vous avez accès au script, vous pouvez également ajouter le code suivant à la fin:

read

Ce code attendra une entrée avant de fermer pour que le terminal reste ouvert jusqu'à ce que vous appuyiez sur Entrée.


1
J'utilise souvent bashà la fin, mais readme permet de fermer la fenêtre avec ctrl+cou enter, au lieu de ctrl+shift+wou alt+f4. C'est pratique lorsque vous parcourez rapidement votre script.
Hsandt

5

Utilisez bashl' --init-fileoption avec un tuyau temporaire:

bash --init-file <(echo './<script_name>')

Ex:

bash --init-file <(echo './bla.sh')

2

Utiliser xtermet ajouter ;bashà la fin de la chaîne de commande fonctionne. Par exemple:

xterm -e "bash ~/script.sh;bash"

Cela fait ce qui suit:

  1. ouvre xterm
  2. exécute le script script.sh
  3. affiche l'invite bash une fois le script terminé.

Vous pouvez quitter la fenêtre xterm en la fermant ou en tapant exità l'invite bash. Ou vous pouvez taper plus de commandes à la demande.


1
xterm -e bash --rcfile bla.sh

Cela lancera le script dans une nouvelle fenêtre et vous donnera même le contrôle de la fenêtre une fois celle-ci terminée.

Cependant, la nouvelle fenêtre ne se chargera pas ~/.bashrccomme d'habitude, puisque nous avons exécuté à la bla.shplace. On peut remédier à cela en mettant

. ~/.bashrc

Au sommet de bla.sh

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.