私は 4 つのターミナル ウィンドウで Python シミュレーション プログラミングを実行するシェル スクリプトを作成しようとしています。4 つの別々のターミナル ウィンドウ (合計 5 つのウィンドウ、4 つは Python プログラム用、1 つは他のターミナル ウィンドウを制御するためのもの) でプログラムを 4 回起動するスクリプトがあります。次に、制御ターミナル ウィンドウで実行して、他の 4 つのターミナル ウィンドウのプログラムを閉じて強制終了し、制御ターミナル ウィンドウは開いたままにするスクリプトを作成したいと思います。
今のところはこんな感じです
#!/bin/sh
osascript -e 'tell app "Terminal"
do script "killall python"
end tell'
osascript -e 'tell app "Terminal" to quit'
osascript -e 'tell app "Terminal" to open'
問題は、最後の行が機能しないことです。スクリプトが実行されているウィンドウを含むすべてのウィンドウが閉じられるためです。私はシェルや Apple スクリプトにあまり詳しくないので、どんな助けでも歓迎します。私は Stack に投稿しましたが、自動化タイプの質問にはここのほうがよいと思います。ありがとうございます。
答え1
「メイン」ウィンドウの ID を変数に割り当て、スクリプトの最後で、ID が「メイン」ウィンドウの ID と一致しないすべてのウィンドウを閉じることができます。AppleScript 部分は次のようになります。
tell application "Terminal"
set mainID to id of front window
-- insert your code
close (every window whose id ≠ mainID)
end tell
編集
#!/bin/sh
killall python
osascript -e 'tell application "Terminal"' -e 'set mainID to id of front window' -e 'close (every window whose id ≠ mainID)' -e 'end tell'
答え2
スクリプトを実行しているウィンドウが最前面にあり、他のウィンドウを閉じるときにターミナルが確認を求めない場合は、次のような方法を試すことができます。
tell application "Terminal"
close rest of (get windows)
end tell