Question

Scénario

J'utilise terminal SSH beaucoup, serait cependant comme l'application Terminal pour quitter lorsque le dernier onglet ferme à l'aide de sortie. J'ai déjà la fenêtre du terminal lui-même pour la fermeture à la sortie réussie, mais Terminal continue à fonctionner. J'ai suivi le tutoriel de Ricky Campbell qui les utilisations un AppleScript pour quitter terminal. Le AppleScript fonctionne parfaitement lors de l'exécution en dehors du terminal, mais je ne peux pas obtenir en quelque sorte la commande piège au travail qui doit être placé dans le terminal.

Pour référence, j'affichera le texte pertinent ici:

  

Maintenant, nous avons besoin d'un moyen de coup d'envoi du script. Cela peut être fait avec le « piège » de commande bash, en position d'écoute pour le signal EXIT. Comme je veux que cela arrive à chaque fois que mon utilisateur ouvre un shell, je l'ajoute à mon dossier .profile. Je le fais avec nano:

     

$ nano ~ / .profile

     

Dans ce fichier, ajoutez le suivant quelque part. Vous devrez peut-être modifier le chemin vers le fichier AppleScript créé précédemment:

     

trap '/ usr / bin / osascript $ HOME / Scripts / QuitTerminal.scpt' EXIT

     

Tout cela ne fait écouter le signal de sortie dans bash et quand il l'obtient, exécute le script que nous avons créé plus tôt.

Question

Comment puis-je sur le dépannage de ce problème. Pour une raison quelconque le piège ne se déclenche pas ou fonctionne comme il se doit, même après de nombreuses remises à zéro. Y at-il un autre moyen d'obtenir l'application Terminal se fermer lorsque la dernière des sorties de l'onglet?

Solution

Les liens fournis par Dori a conduit à la solution. L'article suggère que la commande du piège doit être .profile, alors qu'en fait, il doit être placé dans .bashrc. Déplacement au script correct résolu le problème.

Était-ce utile?

La solution

L'approche donnée ici semble un peu plus simple, peut-être il serait travail pour vous?

  

Si vous ne voulez pas de se rappeler de taper « quitter » au lieu de « sortie », et que vous utilisez bash, ajoutez simplement ce qui suit à votre .bashrc ou un autre script de démarrage du shell:

trap '/usr/bin/osascript -e "tell application \"terminal\" to quit"' 0
     

Qu'est-ce que ça fait? Lorsque le réservoir reçoit un signal 0 (zéro), qui est, dit de sortie, il exécutera cette commande comme la dernière chose qu'il fait. Cela permet à votre shell, etc, pour sortir avec élégance, et en demandant Terminal.app de sortie via AppleScript fait en sorte qu'il fait la même chose. En d'autres termes, type « sortie », et vos sorties shell, puis quitte Terminal, toute la nature proprement et de la manière prévue.

Le fil complet se trouve ici .

Autres conseils

Vous pouvez également utiliser cette commande alambiquée, qui ne déclenche pas un avertissement sur mettre fin à son propre processus:

osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Ou, vous pouvez définir un alias (comme quit ou exit) dans votre profil:

alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Vous n'a pas besoin trap aucun signal.

Il suffit, mettre la commande osascript dans votre fichier ~/.bash_logout (créer, si n'existe pas)

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

Le .bash_logout est exécuté par bash après que vous déconnecter. Vous pouvez entrer une commande shell dans ce fichier, chacun exécuté lorsque vous vous déconnecter.

Par exemple, vous pouvez ouvrir une fenêtre du Finder dans le dossier où vous avez la dernière, avant la sortie, avec open . ou comme ...

open .
say "Good bye, my master - leaving terminal now, continue with Finder"
osascript -e "tell application \"Terminal\" to quit"

et ainsi de suite ...

Je trouve cette URL pour le cas Terminal multi tabed. http: // cyberdork33. wordpress.com/2010/05/25/make-osx-terminal-quit-when-last-window-closed/
juste testé sur os x 10.8.2
TL.DR:
pour la partie de l'onglet (sortie à l'onglet courant fermer)
Terminal> Préférences> Paramètres> Shell
A la sortie du shell: Fermer si le shell proprement quitté (ou Fermer la fenêtre)
Demander avant Fermeture: Jamais (ou seulement s'il existe des processus autres que les connexions shell et: Insérer « osascript »)

pour la dernière partie de l'onglet (exit pour fermer ce dernier onglet et entières fenêtres terminales et quitter Terminal.app):
1) Ajout pour ~/.bash_profile:

trap '/usr/bin/osascript $HOME/Scripts/QuitTerminal.scpt' EXIT

2) créer des scripts / QuitTerminal.scpt

tell application "Terminal"
    # If there is only one tab remaining, and it contains the word "logout"
    # then this is the final window
    if (count of (tabs of (every window whose visible is true))) = 1 then
        try
            set theContents to words of ((contents of tab 1 of window 1) as Unicode text)
            set exitLastTab to (theContents contains "logout")
        on error
            set exitLastTab to false
        end try

        if exitLastTab is true then
            quit
        end if

    else if (count of (tabs of (every window whose visible is true))) < 1 then
        # If no window remains open, then obviously we can quit the app.
        # This would occur when the final window is closed without 'exit'
        quit
    end if
end tell

it helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à apple.stackexchange
scroll top