web-dev-qa-db-fra.com

Comment fermer le terminal à partir d'un script bash

Je suis nouveau sur ce site et sur Linux.

J'essaie de créer un script simple pour ouvrir un nouveau terminal avec un nouveau nom et fermer l'ancien terminal à partir duquel le script était exécuté.

Le problème que je rencontre est que le numéro de processus est en train de changer. Donc, si je lance le processus et tape: echo $$ je vois 10602. Après la fin du processus, si le nouveau terminal est chargé, le numéro du processus est changé en 10594. Je suis donc en train de tuer le mauvais processus ..

En ce moment j'utilise ce code:

echo -n "Type new terminal name > "  # displays messagebox
read text                            # load messagebox input
echo "$text" > /etc/terminalname     # write messagebox input to file

gnome-terminal                       # open terminal with new name

kill -9 $PPID                        # this will kill the old terminal
exit                                 # exit script
4
Underscore

Je suppose que vous exécutez ces commandes dans un script.

Gardez à l'esprit que $$ est le pid du processus en cours d'exécution bash. Si vous exécutez un script, le processus bash de ce script est un enfant de votre shell interactif actuel. Si vous supprimez $$ dans le script, vous supprimez le script et non le shell parent.

Bash stocke le pid parent dans la variable $PPID, donc vous voulez

#!/bin/bash
gnome-terminal &   # launch a new terminal
kill $PPID         # kill this script's parent

Je suppose que le shell parent est celui généré par le terminal et que vous n'avez pas modifié le comportement par défaut du terminal en ce qui concerne la fermeture lorsque son shell se ferme.

En passant, au lieu de

echo -n "Type new terminal name > "  # displays messagebox
read text                            # load messagebox input

faire

read -p "Type new terminal name > " text
3
glenn jackman

J'ai trouvé une solution appropriée à ce problème grâce aux réponses données. Cela pourrait simplement être fait avec la commande kill -9 $var (où var est $ PPID).

J'ai édité le code de mon article de départ au script que j'utilise maintenant. Merci pour tous vos commentaires.

0
Underscore