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é.
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é.
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")' &
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
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
.
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.
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.
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: