Гид по технологиям

Как автоматически закрывать окно Terminal после выполнения shell-скрипта в macOS

5 min read macOS Terminal Обновлено 23 Nov 2025
Закрывать Terminal после shell-скрипта в macOS
Закрывать Terminal после shell-скрипта в macOS

Быстрые ссылки

  • Изменить это поведение в настройках профиля
  • Альтернатива: использовать iTerm2

Если вы любите запускать shell-скрипты в macOS двойным щелчком или горячей клавишей, возможно, вы заметили, что после завершения скрипта остаётся пустое окно Terminal. Это можно изменить в настройках Terminal для конкретного профиля.

Обратите внимание: описанный метод работает, когда вы запускаете скрипт вне интерактивной bash-сессии — например, двойным кликом по файлу в Finder или через приложение, привязанное к горячей клавише. Если вы вручную запускаете скрипт из уже открытого терминала, вы просто вернётесь к приглашению командной строки. Можно также из скрипта вызвать:

killall Terminal

чтобы закрыть приложение Terminal из скрипта, но это завершит все окна Terminal, что обычно нежелательно.

Изменить поведение в настройках профиля

Откройте приложение Terminal из Dock или папки «Программы», затем откройте настройки нажатием Command+Comma.

В окне Настроек перейдите на вкладку «Профили». Должен быть выбран профиль по умолчанию (тот, что сверху). В правой части окна выберите вкладку “Shell” (Оболочка), затем откройте выпадающее меню “When the shell exits” (Когда оболочка завершается).

Окно настроек Terminal с выбором профиля

По умолчанию меню установлено в «Don’t close the window» (Не закрывать окно). Чтобы окно закрывалось автоматически при успешном завершении скрипта, измените значение на “Close if the shell exited cleanly” (Закрывать, если оболочка завершилась успешно).

Параметры закрытия окна Terminal при завершении процесса

Можно также выбрать вариант всегда закрывать окно, но при выборе «Close if the shell exited cleanly» вы получите сообщение об ошибке, если процесс завершился с ненулевым кодом возврата. Учтите, что в некоторых сценариях нужно явно завершать скрипт командой

exit

чтобы поведение применялось во всех случаях.

Команда exit для явного завершения скрипта

Если вы запускаете скрипт из Finder, система обычно автоматически добавляет команду exit в запускаемый процесс, поэтому дополнительных действий не потребуется.

Альтернатива: использовать iTerm2

Окно настроек iTerm2

iTerm2 — популярная замена Terminal для macOS; она автоматически закрывает окно или вкладку, когда завершается shell-скрипт (в зависимости от настроек). Если вы уже используете iTerm2 по умолчанию, заметьте, что скрипты, запущенные из Finder, всё ещё могут открываться через стандартный Terminal. В таком случае нужно изменить приложение, которое открывает файлы-скрипты.

Чтобы задать приложение по умолчанию для конкретного скрипта, щёлкните правой кнопкой на файле в Finder и выберите «Получить сведения» (Get Info).

Выбор приложения для открытия скрипта в macOS

В поле “Open with” (Открывать с помощью) выберите iTerm, затем нажмите “Change All” (Изменить все), чтобы применить это действие ко всем скриптам такого типа. По умолчанию, если у вас уже открыто окно iTerm, новый запуск скрипта создаст вкладку, а не отдельное окно; вкладка закроется автоматически после завершения.

Когда это не сработает

  • Если скрипт запускается внутри уже открытой интерактивной сессии — настройки профиля не закроют окно, вы просто вернётесь к приглашению.
  • Если скрипт завершился с ошибкой (ненулевой код возврата) и вы выбрали «Close if the shell exited cleanly», окно останется открытым для отладки. Это намеренное поведение.
  • Если скрипт запускает фоновые процессы (background jobs) и не завершает их корректно, оболочка может считать процесс незавершённым.

Альтернативные подходы

  • Явно завершать скрипт через exit с нужным кодом возврата. Например, для успешного завершения:
# ... логика скрипта
exit 0
  • Использовать AppleScript для запуска терминала и последующего закрытия только того окна, которое было создано. Это даёт точечный контроль без закрытия всех окон.

  • Настроить приложение-обёртку (Automator, Shortcuts) для запуска скриптов в выбранном терминале и управления жизненным циклом окна.

Мини-методология (шаги для надёжного результата)

  1. Определите, как вы запускаете скрипт: из Finder, планировщика, приложения-обёртки или из уже открытого терминала.
  2. Если из Finder и нужно автоматическое закрытие без сообщений об ошибках — настройте профиль Terminal: “Close if the shell exited cleanly”.
  3. Если хотите, чтобы окно закрывалось всегда — выберите соответствующую опцию, но учтите риск пропустить ошибки.
  4. Для централизованного управления используйте iTerm2 и назначьте его программой по умолчанию для файлов-скриптов.
  5. Протестируйте с несколькими скриптами: успешные, с ошибкой и с фоновой работой.

Чек-лист для тестирования (роль: разработчик/скриптер)

  • Запустить скрипт двойным кликом и проверить, закрывается ли окно при успешном завершении.
  • Запустить скрипт, принудительно сгенерировав ошибку (exit 1), и проверить, остаётся ли окно.
  • Проверить поведение при использовании фоновых задач (ampersand &).
  • Если используете iTerm2, убедиться, что файл открывается именно через iTerm (Get Info → Open with).
  • Проверить, не закрываются ли другие открытые окна Terminal при применении тестов.

Критерии приёмки

  • Скрипт, завершающийся успешно, автоматически закрывает окно терминала при запуске из Finder.
  • Скрипт, завершающийся с ошибкой, оставляет окно открытым для отладки, если выбран режим «Close if the shell exited cleanly».
  • Изменение приложения по умолчанию для открытия скриптов применено ко всем файлам соответствующего типа.

Короткий справочник и подсказки

  • exit — завершает выполнение скрипта с кодом возврата. exit 0 означает успех.
  • killall Terminal — принудительно завершает все окна Terminal (используйте с осторожностью).
  • “Close if the shell exited cleanly” — опция, позволяющая автоматически закрывать окно только при нулевом коде возврата.

Заключение

Изменение одного параметра профиля Terminal или переход на iTerm2 решит проблему «зависших» пустых окон после выполнения shell-скриптов, запущенных из Finder. Выбор между автоматическим закрытием всегда и только при чистом выходе зависит от того, хотите ли вы автоматически скрывать ошибки или предпочитаете их видеть для отладки.

Важно: тестируйте изменения на небольших скриптах, чтобы убедиться, что поведение соответствует вашим ожиданиям.

Краткое резюме:

  • Настройки профиля Terminal позволяют закрывать окно при чистом завершении.
  • iTerm2 автоматически управляет закрытием вкладок/окон и может быть назначен приложением по умолчанию для скриптов.
  • В некоторых случаях полезно явно вызывать exit в скрипте или использовать AppleScript/Automator для более тонкого контроля.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Перенос Microsoft Authenticator на новый телефон
Безопасность

Перенос Microsoft Authenticator на новый телефон

Список рассылки в Outlook 2013/2016
Почта

Список рассылки в Outlook 2013/2016

Исправление входа в GDM на Fedora 22
Troubleshooting

Исправление входа в GDM на Fedora 22

Отправить .exe по почте в изображении
Электронная почта

Отправить .exe по почте в изображении

Восстановить Swresample-ttv-0.dll
Windows

Восстановить Swresample-ttv-0.dll

Установка PWA в Chrome: быстрое руководство
Веб

Установка PWA в Chrome: быстрое руководство