web-dev-qa-db-fra.com

Fermer la fenêtre du terminal à partir du script Shell (Unix)?

Existe-t-il un moyen de fermer une fenêtre de terminal à partir d'un script Shell? J'ai un fichier .command qui devrait simplement disparaître une fois terminé.

51
ericsoco

En utilisant exit 0 terminera proprement le script.

Si la fenêtre du terminal reste ouverte est configurable par l'utilisateur. La valeur par défaut est de toujours rester ouvert. Pour changer cela:

Terminal.app > Preferences > Profiles > Shell
    - "When the Shell exists:"
        > Close if the Shell exited cleanly
    - "Ask before closing:"
        (•) Never
        -- OR --
        (•) Only if there are....

Lorsque "Fermer si Shell a quitté proprement" est utilisé, le script fermera la fenêtre si le résultat de sortie est 0, ce qui est la valeur par défaut si rien ne s'est mal passé.

57
Simon Urbanek

Comme vous ne voulez pas supprimer toutes les fenêtres du terminal, changez d'abord le nom de votre fenêtre de "Terminal" en autre chose:

echo -n -e "\ 033] 0; Nom de ma fenêtre\007"

Puis à la fin du script, utilisez:

osascript -e 'demande à l'application "Terminal" de se fermer (chaque fenêtre dont le nom contient "My Window Name")' &

21
KevinM

Vous pouvez utiliser Apple script à quitter le terminal app. Ajoutez ce qui suit à votre script -

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

Cela vous donnera une fenêtre contextuelle confirmant la fermeture de l'application. Vous pouvez désactiver cela dans les préférences du terminal.

Alternativement, vous pouvez également utiliser la commande killall pour quitter l'application. Ce qui suit fonctionnerait aussi bien.

killall Terminal

Remarque:

Juste comme note latérale, vous pouvez librement ajouter les commandes ci-dessus à votre script et cela fonctionnerait comme vous le souhaitez. Cependant, il y a quelques mises en garde. Premier étant vous limiterez la capacité de votre script à travailler sur différentes cases. Deuxièmement, il serait plus sûr d'utiliser Nohup pour que toutes les commandes en cours d'exécution ne s'arrêtent pas en raison de la fermeture de Terminal app.

16
jaypal singh

Cela fonctionne pour moi:

#!/bin/sh

{your script here}

osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit

Cela fonctionnera pour fermer uniquement vos fenêtres ouvertes avec un fichier .command mais laisser les choses déjà en cours d'exécution dans d'autres fenêtres de terminal. Je sais que j'ai presque toujours un sass ou un grognement à regarder quelque chose, donc je ne veux pas quitter complètement le terminal.

9
Arron
closeWindow() {
    /usr/bin/osascript << _OSACLOSE_
    tell application "Terminal"
        close (every window whose name contains "YourScriptName")
    end tell
    delay 0.3
    tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal"
_OSACLOSE_
}

Cela fermera la fenêtre du terminal pour votre script et gardera toutes les autres fenêtres du terminal ouvertes tant que leurs titres de fenêtre ne correspondent pas. Pour que cela fonctionne, Terminal devra être ajouté à la liste des applications autorisées à utiliser le cadre d'accessibilité. Vous pouvez également parcourir les fenêtres du terminal avec une commande de répétition et fermer chaque fenêtre x qui contient un élément d'interface utilisateur "Fermer" sur la feuille 1.

7
user2373121

Je trouve que la meilleure solution pour cela est d'utiliser Automator pour créer une véritable application OSX qui fonctionnera de la même manière quelle que soit la configuration de votre système. Vous pouvez demander à l'Automator d'exécuter votre script Shell, ou vous pouvez incorporer le script Shell lui-même dans Automator.

Voici comment procéder:

  1. Exécutez Automator (dans les applications).
  2. Choisissez "Nouveau document" et quand il vous demande "Choisissez un type pour votre document" choisissez "Application"
  3. Dans le panneau de gauche, sélectionnez "Utilitaires" puis "Exécuter le script shell".
  4. Tapez vos commandes de script dans l'élément de flux de travail dans le panneau de droite. Vous pouvez soit appeler un autre script Shell, soit simplement mettre vos commandes directement dans leur.
  5. Enregistrez l'application, qui sera une application Mac à part entière. Vous pouvez même copier-coller des icônes à partir d'autres applications pour donner à votre script une certaine personnalité.
6
Gary Wisniewski