シェルスクリプト内からターミナルウィンドウを閉じる方法はありますか?完了したら、邪魔にならないようにすべき.commandファイルがあります。
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の場合、スクリプトはウィンドウを閉じます。これは何も問題がなかった場合のデフォルトです。
すべてのターミナルウィンドウを削除する必要はないため、最初にウィンドウの名前を「ターミナル」から別の名前に変更します。
echo -n -e "\ 033] 0;マイウィンドウ名\ 007"
次に、スクリプトの最後で、次を使用します。
osascript -e 'アプリケーションに「Terminal」に閉じるように指示する(名前に「My Window Name」が含まれるすべてのウィンドウ)'&
Apple script
を使用してquitterminal app
にすることができます。スクリプトに次を追加します-
osascript -e 'tell application "Terminal" to quit'
これにより、アプリを閉じることを確認するポップアップが表示されます。これはターミナル設定で無効にできます。
または、killall
コマンドを使用してアプリを終了することもできます。以下も同様に機能します。
killall Terminal
念のため、上記のコマンドをスクリプトに自由に追加することができ、必要に応じて機能します。ただし、注意点はほとんどありません。 最初の異なるボックスで動作するスクリプトの能力を制限します。 第二に、Nohup
を使用する方が安全です。これは、現在実行中のコマンドがTerminal app
を終了したために終了しないようにするためです。
これは私のために働く:
#!/bin/sh
{your script here}
osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit
これは、.commandファイルで開いたウィンドウだけを閉じても機能しますが、他のターミナルウィンドウで既に実行されているものを残します。私はほとんどいつもいつも何かを見ているか、うなり声を上げて何かを見ているので、端末を完全にやめたくありません。
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を閉じることもできます。
これに対する最善の解決策は、Automatorを使用して、システムの構成方法に関係なく同じように動作する真のOSXアプリケーションを作成することです。 Automatorにシェルスクリプトを実行させるか、Automatorにシェルスクリプト自体を埋め込むことができます。
方法は次のとおりです。