如何在 OS X Lion 中退出時自動關閉 Terminal.app?

如何在 OS X Lion 中退出時自動關閉 Terminal.app?

我最近購買了一台裝有 OS X Lion 的新 Mac,我正在根據自己的需求進行調整。

我試圖使用其首選項在終端上配置自動關閉(就像我對 Tiger 和 Snow Leopard 所做的那樣),但它不起作用。我設定了“如果外殼完全退出則關閉”,但是當我輸入 時exit,視窗會關閉,但 Terminal.app 仍然打開。它的選單是可見的,透過alt+tab我可以看到它正在運行。

有什麼建議麼?

答案1

此選項從未關閉過終端應用程式。

請注意,其他選項的標題為關上窗戶不要關閉窗戶強調我的),明確此設定僅指關閉窗戶,不是全部應用


您可以為您的 shell 定義以下內容,例如在~/.bash_profilefor中bash

function exit {
    osascript -e 'tell application "Terminal" to quit' 
}

然後新增osascript到退出前不需要確認的應用程式清單(在「首選項」>「設定」>「Shell」中)。鍵入exit退出終端,除非有其他標籤正在執行阻止程式。

exit當然,您可以給它一個不同的名稱來與常規的分開。我喜歡quit這個。

答案2

要讓終端機在關閉最後一個終端機/shell 後退出,您可以讓 shell 在退出時執行 AppleScript:

# Quit Terminal when this shell exists if there are no other terminals open.                                                                                                                    
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
    quit_terminal_when_no_terminals_remain() {
        osascript -e 'tell application "Terminal" to if running and (count every tab of every window whose tty is not "'"$(tty)"'") is 0 then quit'
    }
    trap quit_terminal_when_no_terminals_remain EXIT
fi

Apple_Terminal 的測試可確保此程式碼僅在終端內執行時生效。

由於這是異步運行的,因此腳本可能在包含它的終端關閉之前或之後運行(儘管它通常在之後運行),並且如果由於用戶退出終端而關閉該終端,則腳本運行時終端可能不再運行,因此:

  1. 首先它檢查終端是否仍在運作。如果沒有,則什麼都不做。
  2. 只有當沒有打開任何終端機或只有當前 tty 的終端機時,它才會退出。它檢查除了當前 shell 連接到的 tty 設備“$(tty)”之外是否還有任何選項卡。

請注意,如果您呼叫任何其他捕獲 EXIT 的 shell 程式碼,這些程式碼將相互幹擾。解決方案是建立另一個函數來呼叫其他函數,並「捕獲 the_other_function EXIT」以在 shell 退出時呼叫所有內容。

順便說一句,與往常一樣,如果此功能對您很重要,請向 Apple 提交增強請求。請求首選項設定以使終端機在沒有更多視窗開啟時退出:https://bugreport.apple.com/

答案3

作為一個巧妙的解決方案,嘗試-

open -a /Applications/Utilities/Terminal.app *.py 或 open -b com.apple.terminal *.py

對於啟動的shell,您可以進入“首選項”>“Shell”>將其設定為如果沒有錯誤就退出。

當我需要幾乎同時運行許多腳本/命令時,我經常使用它。

就是這樣。

答案4

一個更簡單、更優雅的解決方案是在 .bash_profile 中設定一個別名,如下指令:

alias quit="killall Terminal"

很漂亮吧?

相關內容