OS X Lion で終了時に Terminal.app を自動的に閉じるにはどうすればよいですか?

OS X Lion で終了時に Terminal.app を自動的に閉じるにはどうすればよいですか?

最近、OS X Lion を搭載した新しい Mac を入手し、自分のニーズに合わせて調整しています。

ターミナルの設定を使用して自動終了を設定しようとしましたが (Tiger や Snow Leopard で行ったように)、機能しません。「シェルが正常に終了した場合は閉じる」を設定しましたが、 と入力するとexit、ウィンドウは閉じますが、Terminal.app はまだ開いたままです。メニューが表示され、alt+でtab実行中であることがわかります。

助言がありますか?

答え1

このオプションでは、ターミナル アプリケーションが閉じられることはありません。

他のオプションはそれを閉めてそして閉じないでください強調鉱山)この設定は閉鎖のみを指すことを明確にしています全体ではなく応用


シェルに対して、例えば~/.bash_profileforで次のように定義できますbash

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

次に、osascript終了前に確認を必要としないアプリケーションのリストに追加します ([環境設定] > [設定] > [シェル])。exitブロックするプログラムが実行中の他のタブがない限り、ターミナルを終了するには、と入力します。

exitもちろん、通常の と区別するために別の名前を付けることもできます。私はquitこれが好きです。

答え2

最後のターミナル/シェルを閉じた後にターミナルを終了するには、終了時にシェルで 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 用のターミナルしか開いていない場合にのみ終了します。現在のシェルが接続されている tty デバイス "$(tty)" 以外のタブがあるかどうかを確認します。

EXIT をトラップする他のシェル コードを呼び出すと、これらが互いに干渉することに注意してください。解決策は、他の関数を呼び出す別の関数を作成し、「trap the_other_function EXIT」を実行して、シェルの終了時にすべてを呼び出すことです。

ちなみに、いつものように、この機能が重要な場合は、Apple に機能強化リクエストを提出してください。開いているウィンドウがなくなったときにターミナルを終了するように設定を要求してください。https://bugreport.apple.com/

答え3

良い解決策としては、

open -a /Applications/Utilities/Terminal.app *.py または open -b com.apple.terminal *.py

起動されたシェルについては、「環境設定」>「シェル」に移動し、エラーがなければ終了するように設定できます。

これは、多くのスクリプト/コマンドをほぼ同時に実行する必要がある場合によく使用します。

それでおしまい。

答え4

はるかに簡単でエレガントな解決策は、次のコマンドのように .bash_profile にエイリアスを設定することです。

alias quit="killall Terminal"

美しいでしょう?

関連情報