Как я могу получить Mac ".command" файл для автоматического выхода после запуска оболочки script?
В моей оболочке script мои последние строки:
...
echo "$l" done
done
exit
У меня установлен параметр "Предпочтение терминала": "Когда оболочка выходит: Закройте окно". Во всех остальных случаях, когда я набираю "exit" или "logout", в Terminal закрывается окно, но для этого файла ".command" (я могу дважды щелкнуть файл my script и script выполняется), вместо закрытия окна, в то время как в коде файла указано "exit", то, что отображается на экране, является:
...
$l done
logout
[Process completed]
... и окно остается открытым. Кто-нибудь знает, как запустить оболочку script, а затем просто автоматически выйти из окна терминала при завершении?
Спасибо!
Ответы
Ответ 1
Наконец-то я смог найти ответ на этот вопрос. Подобно cobbal answer, он вызывает AppleScript, но поскольку это единственное окно, которое у меня было бы открыто, и я хочу запустить мой script в качестве быстрой операции open-and-close, этот более жестокий подход отлично подходит для меня.
В самой команде ".command" script "... добавьте эту строку в ваш script в конце"
osascript -e 'tell application "Terminal" to quit' &
exit
ИСТОЧНИК: http://forums.macosxhints.com/archive/index.php/t-2538.html
Ответ 2
Это сработало отлично для меня.. он просто закрывает это окно выполнения, оставляя открытыми другие окна терминала
Просто откройте "Терминал" и перейдите в "Терминал" > "Настройки" > "Настройки" > "Шелл": > Когда оболочка завершает работу: → Закрыть, если оболочка вышла из строя
Затем просто добавьте exit; в конце вашего файла.
Ответ 3
Используйте "Terminal" > "Настройки" > "Настройки" > "Shell": > Когда оболочка завершает: → Закрыть, если оболочка вышла чисто ", упомянутая выше, но поместите
exit 0
в качестве последней строки вашего командного файла. Это гарантирует, что script действительно выполняет "чистое завершение" - иначе, если предыдущая команда не вернет успех, окно не будет закрыто.
Ответ 4
В приложении терминала есть настройка. К сожалению, это относится ко всем окнам терминалов, а не только к запущенным через файл .command.
Ответ 5
вы можете использовать некоторые взлома applescript для этого:
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
Ответ 6
Я использую следующую команду в своем script
quit -n terminal
Конечно, перед закрытием обязательно должен быть установлен терминал.
Ответ 7
Если вам не нужно использовать вышеперечисленные решения AppleScript, это единственное решение для работы с оболочкой script (exit
), даже если оно внезапно для меня (проверено в OS X 10.9):
...
echo "$l" done
done
killall Terminal
Конечно, это убьет все запущенные экземпляры терминала, поэтому, если вы работали над окном терминала перед запуском script, он также будет прерван. К счастью, перезапуск терминала приводит вас к состоянию "Восстановлено", но, тем не менее, это должно рассматриваться только для случаев с краями, а не как чистое решение.