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

104

Lorsque j'ai terminé avec le terminal, je veux le quitter. Pour le 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 changé les paramètres pour quitter le terminal. L'application apparaît toujours ouverte dans le Dock et ne fait pas ce que je veux qu'elle fasse.

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

Alors maintenant, comment dois-je quitter et fermer le terminal? J'ai entendu quelque chose sur osascript mais je ne suis pas trop sûr. Je veux quitter et fermer, pour que le Terminal ne soit plus ouvert, à la fois en tant que fenêtre et en tant que processus.

acier foncé
la source
Comme kill, par killalldéfaut , l' envoi SIGTERM, qui peut être intercepté. Certains programmes l'attrapent, nettoient après eux et se terminent gracieusement. Aucune idée si Terminal.appest parmi eux. Cependant, je soupçonne que ce serait mieux sur Ask Different ou Super User à la rigueur car il ne semble pas avoir de contenu de programmation.
dmckee --- ex-moderator chaton
1
Je pense que la question serait mieux formulée «Comment quitter le terminal après la sortie du dernier shell?».
Chris Page

Réponses:

194

dans Terminal.app

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

sur 'Quand le shell sort' choisi 'Fermer la fenêtre'

Duc
la source
@PrabhuKonchada ne serait pas trop terrible si vous vouliez utiliser cet espace pour alimenter la sortie de l'utilisateur, mais sinon la réponse d'insanikov aurait bien fait quife pour moi
Frankenmint
Évident et propre, parfait.
aydinugur
12
Dans les nouvelles versions d'OS X, cette option se trouve sous 'Préférences> Profils> (Sélectionner un profil)> Shell.
XtraSimplicity
Vous pouvez utiliser le lien pour plus d'informations sur les étapes étape par étape cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya
1
Vous pouvez également sélectionner tous les profils et apporter les modifications à tous en même temps.
31

Et le bon vieux Command-Q?

Holygeek
la source
Il veut dire commande Q. Est-ce une bonne méthode? Cela ne me semble pas différent de killall.
darksteel
@darksteel: Command-Q est le bon moyen de fermer une application sur le Mac. Faire un killall est probablement aussi bien puisque l'application doit se terminer proprement.
tomlogic
2
Ouais, je voulais taper "Commande" mais il est sorti comme Ctrl. Je dirais que c'est un cas de PEBBAF (un problème existe entre le cerveau et le bout des doigts).
Holygeek
kill / killall n'est généralement pas un bon moyen de terminer une application. Cela pourrait annuler l'état non enregistré ou enregistrer l'état qui ne reflète pas correctement l'apparence de l'application si vous l'aviez quittée. Mac OS X a une fonction «Arrêt soudain» où les programmes peuvent indiquer quand ils sont dans un état où il est sûr de les tuer (avec SIGKILL, en fait), et si vous avez vérifié l'état du Terminal avec Activity Monitor pour vérifier que il est prudent de le tuer en premier (affichez la colonne «Arrêt soudain» et recherchez «Oui»), vous pouvez alors le faire, mais vous ne pouvez pas facilement automatiser ce flux de travail.
Chris Page
Nous pouvons toujours utiliser la commande-Q après la sortie, qui ferme tous les processus et ferme ensuite le terminal.
Optimus Prime
29

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

Sélectionnez l' onglet Shell sur la droite. entrez la description de l'image ici

Vous pouvez choisir Ne jamais demander avant de fermer pour supprimer l'avertissement.

Blaise
la source
5
J'ai réalisé ceci avec When shell exits:"fermer la fenêtre"
Anup
1
Cette réponse n'a pas fonctionné pour moi en choisissant «Jamais». Cependant, le commentaire de @ Anup sur "Fermer la fenêtre" a fait l'affaire pour moi.
Ultimater
12

En fait, vous devez définir une configuration sur votre terminal, lorsque votre terminal est en marche, appuyez sur +, ,vous verrez l'écran ci-dessous:

entrez la description de l'image ici

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

entrez la description de l'image ici

Sélectionnez maintenant Close if the shell exited cleanlyà la sortie du shell .

Par la configuration ci-dessus chaque fois avec la exitcommande, le terminal se fermera mais ne quittera pas.

AmerllicA
la source
10

Vous pouvez utiliser AppleScript via la osascriptcommande:

osascript -e 'tell application "Terminal" to quit'
icktoofay
la source
Je n'avais pas essayé la commande osascript, mais il y a deux problèmes que j'ai avec ceci: 1. Il est assez long pour qu'une commande se ferme. Cela ne devrait-il pas être plus simple? J'aime dans Windows comment la sortie termine l'invite de commande. 2. Il m'incite toujours à quitter Terminal. Je veux qu'il passe simplement par les motions. Une fenêtre s'est ouverte me demandant si je voulais vraiment arrêter.
darksteel
1
@darksteel: 1. Ajoutez un alias dans votre .bashrc(ou équivalent si vous utilisez un shell différent). Je pense toujours à une réponse à la 2.
icktoofay
Je pense que la commande Q fonctionne le mieux. Mais je suis curieux de savoir comment configurer correctement un alias. Il y a quelques commandes comme "ping google.com" que je fais assez souvent pour que je préfère un alias.
darksteel
@darksteel: C'est bien trop réfléchir, mais pour éviter 2, vous pouvez démarrer un processus démonisé qui dort environ une seconde, puis exitaprès avoir démarré le processus démonisé. Une fois que le processus démonisé a attendu une seconde, il peut appeler osascriptcomme décrit.
icktoofay
@darksteel: Vous pouvez également déclencher une pression de touche par osascript: tell application "System Events" to keystroke "a" using command down. Cela aura probablement aussi le problème.
icktoofay
9

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

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

Cela tuera le processus d'application Terminal, qui est le parent du parent du processus actuel, comme le montre la commande kill.

Pour fermer une fenêtre de terminal à partir d'un script en cours d'exécution, vous devez monter d'un niveau de plus dans la hiérarchie des processus comme ceci:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 
GOTO 0
la source
7
Pour info, cette solution tue également d'autres fenêtres de terminal.
tresf
Et ne l'utilisez kill -9que si vous savez que d'autres signaux ne fonctionneront pas.
tripleee le
9

J'utilise ctrl + d. Il vous jette dans la destination où vous avez commencé la commande sqlite3 en premier lieu.

Kalafun
la source
5

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

Cela simule une pression sur la touche CMD+ w.

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

Cela ne donne aucune erreur et fait que le terminal s'arrête proprement.

insanikov
la source
4

Vous pouvez également utiliser cette commande alambiqué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 quitdans le terminal sans avoir à manipuler d'autres paramètres.

David P.
la source
2

Utilisez la osascriptcommande 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 et définissez «Invite avant de fermer:» sur «Jamais». Le terminal doit maintenant se fermer complètement (ne pas rester ouvert dans votre dock) et ignorer l'invite avant de quitter. Si vous n'avez qu'une seule fenêtre Terminal ouverte et que la osascriptcommande est votre dernière ligne de code, elle doit attendre la commande que vous avez exécutée avant de se terminer.

Ce ne serait pas idéal si vous exécutez des scripts dans la même fenêtre ou 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 d'une esperluette ); Faites attention!

Si vous encapsulez le osascriptcode dans un fichier de script shell, vous pouvez probablement l'appeler avec le nom de fichier lapidaire que vous lui donnez --- tant qu'il est dans le chemin de recherche de Terminal (exécutez echo $PATHpour voir où Terminal recherche les scripts).

John
la source
1

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 + wpour 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

Ensuite, ajoutez un alias dans votre * shrc

juste comme vi ~/.bashrcou zshrc(autre chose?)

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

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

Péché
la source
0

J'ai utilisé

quitter -n terminal

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

So Terminal> Préférences> Paramètres> Shell Lorsque le shell se ferme Fermer la fenêtre Demander avant de fermer Jamais

Jon
la source
0

J'ai essayé plusieurs variantes des réponses ici. Peu importe ce que j'essaye, je peux toujours trouver un cas d'utilisation où l'utilisateur est invité à fermer Terminal.

Étant donné que mon script est simple ( drutil -drive 2 tray open- pour ouvrir un lecteur de DVD spécifique), l'utilisateur n'a pas besoin de voir la fenêtre Terminal pendant que le script s'exécute.

Ma solution était de transformer le script en une application, qui exécute le script sans afficher de fenêtre de terminal. L'avantage supplémentaire est que toutes les fenêtres de terminal déjà ouvertes restent ouvertes, et si aucune n'est ouverte, alors Terminal ne reste pas résident après la fin du script. Il ne semble pas du tout lancer Terminal pour exécuter le script bash.

J'ai suivi ces instructions pour transformer mon script en application: https://superuser.com/a/1354541/162011

James L.
la source
-3

S'il s'agit d'un Mac, vous tapez «exit» puis appuyez sur retour.

Tremaine
la source