以下のterminal
スクリプトを前提として、osascript
を変更して、front window
をターゲットにする代わりに、から開かれる特定のウィンドウをターゲットにします。 AppleScript。
terminal
:
#!/bin/bash
# Usage:
# terminal [CMD] Open a new terminal window and execute CMD
#
# Example:
# terminal cd "sleep 100"
terminal() {
# Mac OS only
[ "$(uname -s)" != "Darwin" ] && {
echo 'Mac OS Only'
return
}
local cmd=""
local args="$*"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if [ -n "$args" ]; then
cmd="$args"
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
osascript <<EOF
tell application "Terminal" to tell the front window
set w to do script "$cmd"
repeat
delay 1
if not busy of w then exit repeat
end repeat
close it
end tell
EOF
}
terminal "$@"
現在、front window
を使用しているため、ウィンドウが別のターミナルウィンドウにポップアップした後、フォーカスを変更できます。その後、do script
タスクが完了すると、close it
は、現在フォーカスしているウィンドウを閉じます。実際にdo script
を実行したウィンドウではありません。
私が考えていたアイデアの1つは、AppleScriptを変更して、以下のようにAppleScriptから作成されたウィンドウのwindow id
を取得することでした。ただし、close W
は機能しません。
tell application "Terminal"
set W to do script ""
activate
set S to do script "sleep 5" in W
repeat
delay 1
if not busy of S then exit repeat
end repeat
close W
end tell
このstackexchangeに基づいて answer ウィンドウオブジェクトを保存してからループすることができます。
次に、フォーカスがあるかどうかに関係なく、開いたウィンドウを閉じることができます。
osascript <<EOF
tell application "Terminal"
set newTab to do script
set current settings of newTab to settings set "Grass"
set theWindow to first window of (every window whose tabs contains newTab)
do script "$cmd" in newTab
repeat
delay 0.05
if not busy of newTab then exit repeat
end repeat
repeat with i from 1 to the count of theWindow's tabs
if item i of theWindow's tabs is newTab then close theWindow
end repeat
end tell
EOF
set current settings of newTab to settings set "Grass"
行は必要ありません-関連するウィンドウを別の色で表示するだけです。
これを行う方法は非常に簡単で、以前の質問に対してこの効果についてコメントを残しました。
やりたいことによっては、AppleScriptの
w
の値が役立つ場合があります。do script
によって作成されたウィンドウは、(w
に割り当てた)AppleScript参照を返します。これはtab 1 of window id <number>
の形式になります。ここで、<number>
は5または-です。したがって、ウィンドウの存続期間を通じて固定されたままの数字ID番号。 参照に常にtab 1 of...
が含まれているという事実を無視する必要があります。これは、1つのウィンドウに含まれる3つのタブがすべてtab 1 of...
3つの異なるid
番号になるため誤解を招く恐れがあります。
お気づきのとおり、close
コマンドはtab
には適用されないため、window id
が必要です。 do script
コマンドから作成された参照はtab 1 of window id...
を提供するため、特定のdo script
コマンドが実行されているウィンドウをいつでも参照できます。
tell application id "com.Apple.Terminal"
set T to do script "echo $$" --> btw, there's the pid number of the window's sub-Shell
set W to the id of window 1 where its tab 1 = T
.
.
(* doing other stuff *)
.
.
close window id W
end tell