2

Я бы хотел запустить файл bash на darwin через:

open -n -a Terminal --args bashfile.sh

Сам файл bash выглядит так:

#! /bin/sh
<application> <arguments>

Это работает, как и ожидалось, но есть ли способ закрыть окно терминала, когда процесс будет завершен?

Я уже пытался exit; и exit 0; но без успеха.


Частичное решение

В настройках ТерминалаТерминал»> «Настройки»> «Настройки»> «Оболочка») вы можете установить флаг «Когда существует оболочка», чтобы close the window if the shell exited cleanly . Если ничего не пошло не так, это впоследствии закрывает окно терминала, но не приложение как таковое.

3 ответа3

2

Если это единственное окно терминала, то вы можете попытаться убить его процесс из скрипта, что завершит процесс Терминала и запущенный в нем скрипт bash. Самое сложное здесь - определить правильный способ убить его, который будет работать на вас. Самый простой способ это сделать:

killall Terminal

Я предполагаю, что несколько окон терминала запускаются в одном процессе, так что после этой команды у вас будут закрыты все окна.

Если вы используете другой эмулятор терминала в качестве основного инструмента (например, iTerm), то это не будет проблемой.

1

Вы помечаете но shebang указывает на /bin/sh . Я предполагаю, что sh является символической ссылкой на bash в вашей системе.

Пытаться

kill $PPID

в конце вашего сценария. Когда $PPID расширяется до идентификатора процесса родителя оболочки, он должен уничтожить правый Terminal и оставить другие экземпляры в покое.

На моем Terminal Ubuntu находится эмулятор терминала GNUstep. Я не знаю, насколько это похоже на ваше.

Кроме того, мой Terminal (пакет terminal.app , версия 0.9.8-1+nmu1build1 , ОС Ubuntu 14.04.5 LTS) часто ведет себя неправильно, когда получает сигнал из сценария; висит безнадежно. Думаю, ошибка. Единственный надежный способ убить его - силой

kill -SIGKILL $PPID
0

На странице руководства Bash есть раздел, посвященный специальным параметрам. То, что вам нужно, это $$ , который расширяется до PID текущей оболочки.

kill $$ должен делать то, что вы хотите, хотя я сейчас на Win7 и не могу это проверить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .