Вопрос

Сценарий

Я много использую терминал для SSH, однако хотел бы, чтобы приложение терминала ушла, когда последняя вкладка закрывается с помощью выхода. У меня уже есть сальное окно терминала, которое будет закрыто на успешном выходе, однако терминал продолжает работать. Я следовал учебному пособию Рикки Кэмпбелла здесь который использует AppleScript, чтобы выйти из терминала. AppleScript работает отлично при запуске за пределами терминала, однако я каким -то образом не могу заставить команду Trap для работы, которую необходимо поместить в терминал.

Для справки я опубликую соответствующий текст здесь:

Теперь нам нужен способ начать сценарий. Это может быть сделано с помощью команды Bash «Trap», прислушиваясь к сигналу выхода. Поскольку я хочу, чтобы это произошло каждый раз, когда мой пользователь открывает оболочку, я добавляю ее в свой .profile File. Я делаю это с Нано:

$ nano ~/.profile

В этом файле добавьте следующее где -нибудь. Вам может потребоваться отредактировать путь к файлу AppleScript, который вы создали ранее:

TRAP '/usr/bin/osascript $ home/scripts/quitterminal.scpt' exit

Все, что это делает, это прослушивание сигнала выхода в Bash, и когда он его получает, запускает сценарий, который мы создали ранее.

Вопрос

Как я могу устранение устранения этой проблемы. По какой -то причине ловушка не стреляет и не работает так, как должна, даже после многочисленных перезагрузков. Есть ли альтернативный способ заставить приложение терминала закрыться, когда последняя вкладка выходит?

Решение

Ссылки, предоставленные Дори, привели к решению. Статья предполагает, что команда ловушек должна быть в .profile, когда на самом деле это должно быть помещено в .bashrc. Анкет Перемещение его в правильный сценарий исправил проблему.

Это было полезно?

Решение

Подход дано здесь Выглядит немного проще - может быть, это сработает для вас?

Если вы не хотите помнить, чтобы печатать «уйти» вместо «выхода», и вы используете Bash, просто добавьте следующее в свой .bashrc или другой скрипт запуска снаряда:

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

Что это делает? Когда оболочка получает сигнал 0 (нулевой), то есть сказано, чтобы выйти, она выполнит эту команду как последнее, что делает. Это позволяет вашей оболочке и т. Д., Выходить изящно и просить Terminal.App выйти через AppleScript гарантировать, что она делает то же самое. Другими словами, тип «выход», а ваша раковина выходит, затем терминал уходит, все чисто и то, как намерена природа.

А Полный поток можно найти здесь.

Другие советы

Вы также можете использовать эту запутанную команду, которая не запускает предупреждение о прекращении своего собственного процесса:

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

Или вы можете определить псевдоним (например quit или же exit) в вашем профиле:

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

Вам не нужно trap любой сигнал.

Проще говоря, поместите команду Osascript в свой ~/.bash_logout Файл (создайте его, если не существует)

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

А .bash_logout выполняется Bash после выхода. Вы можете ввести любую команду Shell в этот файл, каждый из которых будет выполнена при выходе из входа.

Например, вы можете открыть окно Finder в папке, где вы были последними, перед выходом, с open . или как ...

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

и так далее...

Я нахожу этот URL для многочисленного терминала.http://cyberdork33.wordpress.com/2010/05/25/make-osx-tminal-quit-when-last-window-closed/
Только что протестировано на OS X 10.8.2
Tl.dr:
Для детали вкладки (вкладка «Выход», чтобы закрыть текущий вкладку)
Терминал> Настройки> Настройки> Оболочка
Когда оболочка выходит: закройте, если оболочка выходит чисто (или закройте окно)
Подсказка перед закрытием: никогда (или только если есть процессы, отличные от оболочки логин, и: вставьте «Osascript»)

Для последней части вкладки (выйти, чтобы закрыть эту последнюю вкладку и целые терминальные Windows и вывести терминал. App):
1) Добавить на ~/.bash_profile:

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

2) Создание 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

Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с apple.stackexchange
scroll top