web-dev-qa-db-ja.com

シェルスクリプト(Unix)内からターミナルウィンドウを閉じますか?

シェルスクリプト内からターミナルウィンドウを閉じる方法はありますか?完了したら、邪魔にならないようにすべき.commandファイルがあります。

51
ericsoco

exit 0を使用すると、スクリプトが正常に終了します。

ターミナルウィンドウを開いたままにするかどうかは、ユーザーが構成できます。デフォルトでは、常に開いたままです。これを変更するには:

Terminal.app > Preferences > Profiles > Shell
    - "When the Shell exists:"
        > Close if the Shell exited cleanly
    - "Ask before closing:"
        (•) Never
        -- OR --
        (•) Only if there are....

「シェルが正常に終了した場合は閉じる」を使用すると、終了結果が0の場合、スクリプトはウィンドウを閉じます。これは何も問題がなかった場合のデフォルトです。

57
Simon Urbanek

すべてのターミナルウィンドウを削除する必要はないため、最初にウィンドウの名前を「ターミナル」から別の名前に変更します。

echo -n -e "\ 033] 0;マイウィンドウ名\ 007"

次に、スクリプトの最後で、次を使用します。

osascript -e 'アプリケーションに「Terminal」に閉じるように指示する(名前に「My Window Name」が含まれるすべてのウィンドウ)'&

21
KevinM

Apple scriptを使用してquitterminal appにすることができます。スクリプトに次を追加します-

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

これにより、アプリを閉じることを確認するポップアップが表示されます。これはターミナル設定で無効にできます。

または、killallコマンドを使用してアプリを終了することもできます。以下も同様に機能します。

killall Terminal

注意:

念のため、上記のコマンドをスクリプトに自由に追加することができ、必要に応じて機能します。ただし、注意点はほとんどありません。 最初の異なるボックスで動作するスクリプトの能力を制限します。 第二にNohupを使用する方が安全です。これは、現在実行中のコマンドがTerminal appを終了したために終了しないようにするためです。

16
jaypal singh

これは私のために働く:

#!/bin/sh

{your script here}

osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit

これは、.commandファイルで開いたウィンドウだけを閉じても機能しますが、他のターミナルウィンドウで既に実行されているものを残します。私はほとんどいつもいつも何かを見ているか、うなり声を上げて何かを見ているので、端末を完全にやめたくありません。

9
Arron
closeWindow() {
    /usr/bin/osascript << _OSACLOSE_
    tell application "Terminal"
        close (every window whose name contains "YourScriptName")
    end tell
    delay 0.3
    tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal"
_OSACLOSE_
}

これにより、スクリプトのターミナルウィンドウが閉じられ、ウィンドウタイトルが一致しない限り、他のターミナルウィンドウが開いたままになります。それが機能するためには、アクセシビリティフレームワークの使用が許可されているアプリケーションのリストにターミナルを追加する必要があります。また、繰り返しコマンドを使用してターミナルウィンドウを切り替え、シート1のUI要素「閉じる」を含むすべてのウィンドウxを閉じることもできます。

7
user2373121

これに対する最善の解決策は、Automatorを使用して、システムの構成方法に関係なく同じように動作する真のOSXアプリケーションを作成することです。 Automatorにシェルスクリプトを実行させるか、Automatorにシェルスクリプト自体を埋め込むことができます。

方法は次のとおりです。

  1. Automatorを(アプリケーションで)実行します。
  2. 「新規ドキュメント」を選択し、「ドキュメントのタイプを選択してください」と尋ねられたら、「アプリケーション」を選択します
  3. 左側のパネルで、[ユーティリティ]、[シェルスクリプトの実行]の順に選択します。
  4. 右側のパネルのワークフローアイテムにスクリプトコマンドを入力します。別のシェルスクリプトを呼び出すか、コマンドを直接スクリプトに入れることができます。
  5. アプリケーションを保存します。これは本格的なMacアプリになります。他のアプリからアイコンをカットアンドペーストして、スクリプトに個性を持たせることもできます。
6
Gary Wisniewski