web-dev-qa-db-fra.com

OSX - Comment faire pour fermer automatiquement la fenêtre du terminal après l'exécution de la commande "exit".

Quand j'ai fini avec Terminal, je veux le quitter. En ce moment, j'ai trois options:

  1. killall Terminal. Cela mettra fin au processus, mais plutôt brusquement. Je ne pense pas que ce soit la meilleure idée.

  2. Appelez la sortie. J'ai modifié les paramètres, donc exit ferme Terminal. Cependant, l'application reste ouverte dans le Dock et ne fait pas ce que je veux.

  3. Clic droit> Quitter. Cependant, ce n'est pas une commande de terminal pour le quitter.

Alors maintenant, comment puis-je sortir et fermer le terminal? J'ai entendu parler d'osascript mais je n'en suis pas très sûr. Je souhaite quitter et fermer afin que Terminal ne soit plus ouvert, à la fois en tant que fenêtre et en tant que processus.

82
darksteel

dans Terminal.app

Préférences> Profils> (sélectionnez un profil)> Shell.

sur 'When the Shell exits' choisi 'Fermer la fenêtre'

154
Duke

Que diriez-vous du bon vieux Command-Q?

29
holygeek

Dans l'application Terminal, onglet Préférences >> Profils.

Sélectionnez l'onglet Shell à droite .  enter image description here

Vous pouvez choisir Jamais Demander avant la fermeture pour supprimer l’avertissement.

27
Blaise

J'utilise ctrl + d. Il vous jette dans la destination où vous avez démarré la commande sqlite3.

9
kalafun

En fait, vous devez définir une configuration sur votre terminal. Lorsque votre terminal est opérationnel, appuyez sur +, alors vous verrez l'écran ci-dessous:

enter image description here

Appuyez ensuite sur l'onglet Shell et vous verrez l'écran ci-dessous:

enter image description here

Sélectionnez maintenant Close if the Shell exited cleanly pour lorsque le shell se ferme .

Avec la configuration ci-dessus à chaque fois avec la commande exit, le terminal se ferme mais ne se ferme pas.

8
AmerllicA

Dans une fenêtre de terminal, vous pouvez taper:

kill -9 $(ps -p $PPID -o ppid=)

Cela supprimera le processus d'application Terminal, qui est le parent du parent du processus en cours, comme indiqué par la commande kill. 

Pour fermer une fenêtre de terminal depuis un script en cours d'exécution, vous devez monter d'un niveau supplémentaire dans la hiérarchie des processus, comme suit:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 
8
GOTO 0

Vous pouvez utiliser AppleScript avec la commande osascript:

osascript -e 'tell application "Terminal" to quit'
7
icktoofay

osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"

Cela simule un CMD + w appuyez sur la touche.

Si vous voulez que Terminal quitte complètement, vous pouvez utiliser: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Cela ne génère aucune erreur et arrête le terminal proprement.

4
insanikov

Vous pouvez également utiliser cette commande compliquée, qui ne déclenche pas d'avertissement concernant la fin de son propre processus:
osascript -e "do Shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Cette commande est assez longue, vous pouvez donc définir un alias (tel que quit) dans votre profil bash:
alias quit='osascript -e "do Shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Cela vous permettrait de taper simplement quit dans le terminal sans avoir à manipuler d’autres paramètres.

3
David P.

Utilisez la commande osascript dans votre code comme indiqué par icktoofay: osascript -e 'tell application "Terminal" to quit'

Ensuite, ouvrez les préférences du terminal, accédez à Paramètres> Shell, puis réglez "Demander avant la fermeture:" sur "Jamais". Le terminal doit maintenant quitter complètement (ne pas rester ouvert dans votre dock) et ignorer l'invite avant de quitter. Si une seule fenêtre de terminal est ouverte et que la commande osascript est votre dernière ligne de code, il convient d'attendre que la commande que vous avez exécutée précédemment se termine.

Ce ne serait pas idéal si vous exécutez des scripts dans la même fenêtre ou dans d’autres fenêtres en arrière-plan (par exemple, vous pouvez exécuter une commande en arrière-plan et continuer à utiliser la fenêtre actuelle pour d’autres commandes si la première commande est suivie par une esperluette). ) Faites attention!

Si vous enveloppez le code osascript dans un fichier de script Shell, vous pouvez probablement l'appeler avec le nom de fichier que vous lui donnez --- tant qu'il se trouve dans le chemin de recherche du terminal (exécutez echo $PATH pour voir où le terminal cherche les scripts). 

2
John

J'ai utilisé 

quitter -n terminal 

à la fin de mes scripts. Vous devez avoir le terminal configuré pour ne jamais demander dans les préférences 

Donc Terminal> Préférences> Paramètres> Shell Lorsque le Shell quitte Fermez la fenêtre Invite avant de fermer Jamais

1
Jon

Créez un script:

cat ~/exit.scpt

comme ça:

  • Remarque: S'il n'y a qu'une seule fenêtre, quittez simplement l'application, sinon simulez command + w pour fermer l'onglet)

tell application "Terminal" set WindowNum to get window count if WindowNum = 1 then quit else tell application "System Events" to keystroke "w" using command down end if end tell

Ajoutez ensuite un alias dans votre * shrc

comme vi ~/.bashrc ou zshrc (autre chose?)

ajoutez-le: alias exit="osascript ~/exit.scpt"

Et sourcez le ~/.bashrc ou rouvrez votre terminal.app

0
Sin