Vous pouvez utiliser .exec ./your-script
Un émulateur de terminal comme GNOME Terminal se ferme lorsque le processus initial qui s'exécute à l'intérieur - qui est généralement un shell - se ferme.
Si vous êtes déjà dans un terminal et que la seule chose que vous voulez faire avant de quitter ce terminal est d'exécuter un script (ou programme) particulier, cela signifie que vous n'avez plus vraiment besoin du shell qui y est exécuté. Ainsi, vous pouvez utiliser la fonction exec
intégrée du shell pour que le shell se remplace par le processus créé par votre commande.
- Dans le cas de votre script, c'est un autre processus shell - tout comme la façon dont un deuxième processus shell est créé lorsque vous exécutez un script sans
exec
.
La syntaxe est , par exemple, .exec command
exec ./your-script
exec
: un exemple
Par exemple, supposons que j'ai un script shell appelé count
, marqué exécutable et situé dans le répertoire courant. Il contient:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
Et, dans un terminal, je lance:
exec ./count
Imprime les chiffres 5
, 4
, 3
, 2
et1
, un par seconde, puis la fermeture du fenêtre de terminal.
Si vous l'exécutez à partir de quelque chose d'autre que le premier processus exécuté dans votre terminal - par exemple, si vous avez exécuté en bash
premier pour démarrer une autre instance de shell - cela vous ramène au shell qui a créé ce processus, plutôt que de quitter le terminal. (Cette mise en garde s'applique également auxexit
méthodes basées sur.)
Vous pouvez utiliser ./your-script; exit
.
Si vous ne voulez pas dire à votre shell de se remplacer par le nouveau processus (via exec
), vous pouvez lui dire de rester, mais de se quitter immédiatement après la fin du nouveau processus.
Pour ce faire, exécutez votre commande et la exit
commande, séparées par ;
afin qu'elles puissent être données sur une seule ligne.
La syntaxe est command; exit
, par exemple, ../your-script; exit
command; exit
contre. command && exit
Vous remarquerez peut-être que cela ressemble à la méthode suggérée dans les réponses de kos et heemayl . La différence est que:./your-script && exit
&&
exécute la deuxième commande uniquement si la première commande a signalé qu'elle a réussi en renvoyant un code de sortie de zéro.
;
exécute la deuxième commande, que la première commande ait ou non rapporté un succès.
Lequel vous voulez dépend de la situation spécifique. Si la commande échoue, voulez-vous que le shell appelant (et le terminal d'hébergement) reste actif? Si oui, utilisez &&
; sinon, utilisez;
.
Il y a aussi command || exit
, qui ne quitte le shell appelant qu'en cas d' écheccommand
signalé .