Как заставить файл Mac ".command" автоматически завершать работу после запуска сценария оболочки? - PullRequest
19 голосов
/ 02 апреля 2010

В моем сценарии оболочки мои последние строки:

...
echo "$l" done
done

exit

У меня в Терминале установлено значение «При выходе из оболочки: закройте окно». Во всех других случаях, когда я набираю «выход» или «выход», в Терминале окно закрывается, но для этого файла «.command» (я могу дважды щелкнуть файл сценария оболочки, и сценарий запустится) закрытия окна, в то время как код файла говорит «выход», на экране отображается:

...
$l done
logout

[Process completed]

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

Спасибо!

Ответы [ 7 ]

23 голосов
/ 05 мая 2010

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

Внутри самого скрипта ".command" "... добавьте эту строку к вашему скрипту в конце"

osascript -e 'tell application "Terminal" to quit' &
exit

ИСТОЧНИК: http://forums.macosxhints.com/archive/index.php/t-2538.html

19 голосов
/ 22 февраля 2013

Это отлично сработало для меня ... просто закрывает окно выполнения, оставляя открытыми другие окна терминала

Просто откройте «Терминал» и перейдите в «Терминал»> «Установки»> «Настройки»> «Оболочка»:> Когда оболочка выйдет: -> Закрыть, если оболочка завершилась чисто

Тогда просто добавьте выход; в конце вашего файла.

4 голосов
/ 16 июня 2015

Используйте параметр «Терминал> Настройки> Настройки> Оболочка:> При выходе из оболочки: -> Закрыть, если оболочка вышла чисто», упомянутый выше, но поставьте

exit 0

как последняя строка вашего командного файла. Это гарантирует, что скрипт действительно «завершится чисто» - в противном случае, если предыдущая команда не вернет успех, окно не закроется.

0 голосов
/ 25 марта 2015

За исключением необходимости использовать вышеупомянутые решения AppleScript, это единственное решение сценария оболочки, которое сработало (exit не сработало), хотя и неожиданно для меня (протестировано в OS X 10.9):

...
echo "$l" done
done

killall Terminal

Конечно, это убьет все запущенные экземпляры терминала, поэтому, если вы работали в окне терминала перед запуском скрипта, он также будет прерван.К счастью, перезапуск Терминала переводит вас в состояние «Восстановлено», но, тем не менее, это следует учитывать только для крайних случаев, а не как чистое решение.

0 голосов
/ 27 июня 2012

Я использую следующую команду в моем скрипте

выход -n терминал

Конечно, вы должны установить терминал, чтобы он никогда не запрашивал перед закрытием.

0 голосов
/ 19 апреля 2010

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

tell application "Terminal"
    repeat with i from 1 to number of windows
        if (number of (tabs of (item i of windows) whose tty is "/dev/ttys002")) is not 0 then
            close item i of windows
            exit repeat
        end if
    end repeat
end tell 

замена /dev/ttys002 на ваш tty

0 голосов
/ 19 апреля 2010

Для этого есть настройка в приложении «Терминал». К сожалению, это относится ко всем окнам терминала, а не только к тем, которые запускаются через файл .command.

...