OSX-「exit」コマンドの実行後にターミナルウィンドウを自動的に閉じる方法


104

ターミナルを使い終わったら、終了します。現在、私には3つのオプションがあります。

  1. killallターミナル。プロセスは終了しますが、突然終了します。これは最高のアイデアだとは思いません。

  2. 出口を呼び出します。設定を変更したので、exitはターミナルを閉じます。ただし、アプリはDockで開いたままの状態で表示され、期待どおりに動作しません。

  3. 右クリック>終了します。ただし、これは終了するためのターミナルコマンドではありません。

では、ターミナルを終了して閉じるにはどうすればよいですか?osascriptについて何か聞いたことがありますが、よくわかりません。終了して閉じたいので、ターミナルはウィンドウとしてもプロセスとしても開いていません。


のようにkillkillallデフォルトでを送信しますがSIGTERM、これはキャッチできます。一部のプログラムはそれをキャッチし、自分自身をクリーンアップして正常に終了します。Terminal.appそれらの中にあるかどうかはわかりません。ただし、プログラミングコンテンツがないように見えるため、Ask DifferentまたはSuper Userの方がピンチが良いと思います。
dmckee ---元モデレーターの子猫

1
質問は、「最後のシェルが終了した後にターミナルを終了する方法は?」というより適切なフレーズになると思います。
Chris Page

回答:


194

Terminal.app内

[設定]> [プロファイル]>(プロファイルを選択)> [シェル]。

「シェルが終了するとき」で「ウィンドウを閉じる」を選択


@PrabhuKonchadaは、ユーザー出力を供給するためにそのスペースを使用したい場合はそれほどひどいものではありませんが、それ以外の場合、insanikovの答えは私にとってはうまく機能します
Frankenmint

明白でクリーン、完璧。
aydinugur 2017

12
OS Xの新しいバージョンでは、このオプションは[設定]> [プロファイル]>(プロファイルの選択)> [シェル]にあります。
XtraSimplicity 2017

あなたはより段階的ステップの情報のためのリンクを使用することができます cnet.com/news/terminal-tip-close-windows-after-clean-exit
クリシャン・クマールMourya

1
すべてのプロファイルを選択して、一度にすべてを変更することもできます。

31

古き良きコマンド-Qはどうですか?


彼はコマンドQを意味します。ただし、これは良い方法ですか?それは私にとってkillallに違いはないようです。
darksteel

@darksteel:Macでアプリを閉じるにはCommand-Qが適切です。killallを実行しても、アプリは正常に終了するように指示されているため、おそらく問題ありません。
tomlogic

2
ええ、私は「コマンド」とタイプするつもりでしたが、それはCtrlとして出てきました。PEBBAF(脳と指先の間に問題がある)の場合だと思います。
holygeek

kill / killallは、通常、アプリケーションを終了する良い方法ではありません。これにより、保存されていない状態、またはアプリケーションを終了するとアプリケーションの外観が正しく反映されない保存状態が破棄される可能性があります。Mac OS Xには、プログラムが(実際にはSIGKILLを使用して)安全に強制終了できる状態にあること、およびアクティビティモニターでターミナルの状態をチェックして最初に強制終了しても安全です([突然の終了]列を表示して[はい]を探します)。そうするとできますが、そのワークフローを簡単に自動化することはできません。
Chris Page

終了後は常にcommand-Qを使用できます。これにより、すべてのプロセスが閉じられ、端末が閉じられます。
Optimus Prime

29

ターミナルアプリの[ 設定] >> [ プロファイル ]タブ。

右側の[ Shell ]タブを選択します。 ここに画像の説明を入力してください

警告を抑制するために、閉じる前に確認しないを選択できます。


5
私はこれをWhen shell exits:「ウィンドウを閉じる」ことで達成しました
Anup

1
この回答は、「しない」を選択しても機能しませんでした。しかし、@ Anupの「ウィンドウを閉じる」についてのコメントは私にとってはトリックでした。
Ultimater

12

実際には、ターミナルで設定を設定する必要があります。ターミナルがアップしているときに+ ,を押すと、次の画面が表示されます。

ここに画像の説明を入力してください

次にシェルタブを押すと、以下の画面が表示されます:

ここに画像の説明を入力してください

次に、[ シェルが終了するとき]を選択Close if the shell exited cleanlyます

上記の設定により、exitコマンドを使用するたびにターミナルは閉じますが、終了しません。


10

osascript次のコマンドでAppleScriptを使用できます。

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

私はosascriptコマンドを試していませんが、これには2つの問題があります。1.コマンドが終了するまでにかなり長い。それはもっと簡単ではないですか?Windowsでは、exitがコマンドプロンプトを終了する方法が好きです。2.それでも、ターミナルを終了するように求められます。動きだけを見てもらいたい。私が本当に辞めたいのかと尋ねるウィンドウが出てきました。
darksteel

1
@darksteel:1.にエイリアスを追加します.bashrc(別のシェルを使用する場合は同等のもの)。私はまだ2に答えを考えています
icktoofay

コマンドQが最もよく機能すると思います。しかし、私はエイリアスを適切に設定する方法に興味があります。"ping google.com"のようなコマンドがいくつかありますが、エイリアスを使用するほど頻繁に実行します。
darksteel

@darksteel:これは考えすぎですが、2を防ぐために、約1秒スリープするデーモン化されたプロセスを開始し、デーモン化されたプロセスの開始後に開始することができexitます。デーモン化されたプロセスが1秒待機した後、osascript説明どおりに呼び出すことができます。
icktoofay 2011

@darksteel:次を介してキーを押すこともできますosascripttell application "System Events" to keystroke "a" using command down。これにも問題があるでしょう。
icktoofay

9

ターミナルウィンドウで、次のように入力できます。

kill -9 $(ps -p $PPID -o ppid=)

これにより、killコマンドで見られるように、現在のプロセスの親の親であるターミナルアプリケーションプロセスが強制終了されます。

実行中のスクリプト内からターミナルウィンドウを閉じるには、次のようにプロセス階層を1つ上に移動する必要があります。

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 

7
ちなみに、このソリューションは他のターミナルウィンドウも強制終了します。
tresf 2016

また、kill -9他の信号が機能しないことがわかっている場合を除き、使用しないでください。
tripleee

9

使ってきましたctrl + d。それはあなたが最初にsqlite3コマンドを開始した目的地にあなたを投げます。


5

osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"

これはCMD+ wキープレスをシミュレートします。

ターミナルを完全に終了させたい場合は、以下を使用できます。 osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

これによりエラーが発生することはなく、ターミナルが完全に停止します。


4

次の複雑なコマンドを使用することもできます。このコマンドは、独自のプロセスの終了に関する警告をトリガーしません。
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

このコマンドは非常に長いためquit、bashプロファイルでエイリアス(など)を定義できます。
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

これquitにより、他の設定をいじる必要なく、ターミナルに簡単に入力できます。


2

osascripticktoofayが述べたように、コードでコマンドを使用します。osascript -e 'tell application "Terminal" to quit'

次に、ターミナルの設定を開き、[設定]> [シェル]に移動し、[閉じる前にプロンプ​​トを表示する]を[しない]に設定します。ターミナルは完全に終了し(ドックで開いたままではありません)、終了する前にプロンプ​​トを無視します。開いているターミナルウィンドウが1つだけで、osascriptコマンドがコードの最後の行である場合、実行するコマンドが完了するまで待機する必要があります。

同じウィンドウまたは他のウィンドウでバックグラウンドでスクリプトを実行している場合、これは理想的ではありません(たとえば、最初のコマンドの後にアンパサンドが続く場合は、コマンドをバックグラウンドで実行し、現在のウィンドウを他のコマンドに引き続き使用できます。 ); 注意してください!

osascriptシェルスクリプトファイルでコードをラップする場合は、ターミナルの検索パス(echo $PATHターミナルがスクリプトを探す場所を確認するために実行される)にある限り、コードに任意の名前を付けて呼び出すことができます。


1

スクリプトを作成します。

cat ~/exit.scpt

このような:

  • 注:ウィンドウが1つしかない場合は、アプリケーションを終了してください。それ以外の場合はcommand + w、タブを閉じるようにシミュレーションしてください)

tell application "Terminal" set WindowNum to get window count if WindowNum = 1 then quit else tell application "System Events" to keystroke "w" using command down end if end tell

次に、* shrcにエイリアスを追加します

と同じvi ~/.bashrcまたはzshrc(他に何か)

追加: alias exit="osascript ~/exit.scpt"

そして〜/ .bashrcをソースするか、またはterminal.appを再度開きます


0

私は使用しています

quit -nターミナル

私のスクリプトの最後に。設定でプロンプトを表示しないようにターミナルを設定する必要があります

したがって、ターミナル>設定>設定>シェル シェルが終了するとき ウィンドウを閉じるプロンプトを閉じて から閉じるし ない


0

ここでいくつかのバリエーションの答えを試しました。何を試しても、ユーザーがターミナルを閉じるように求められるユースケースをいつでも見つけることができます。

私のスクリプトは単純なので(drutil -drive 2 tray open-特定のDVDドライブを開くため)、スクリプトの実行中にユーザーがターミナルウィンドウを表示する必要ありませ

私の解決策は、スクリプトをアプリにして、ターミナルウィンドウを表示せずにスクリプトを実行することでした。追加の利点は、既に開いているターミナルウィンドウは開いたままであり、開いているターミナルウィンドウがない場合は、スクリプトの終了後、ターミナルが常駐しないことです。bashスクリプトを実行するためにターミナルを起動するようには見えません。

次の手順に従って、スクリプトをアプリに変換しました:https : //superuser.com/a/1354541/162011


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.