Спасибо Mark за его замечательный ответ! Расширяя что немного:
# Look up the parent of the given PID.
# From http://stackoverflow.com/questions/3586888/how-do-i-find-the-top-level-parent-pid-of-a-given-process-using-bash
function get-top-parent-pid() {
PID=${1:-$$}
PARENT=$(ps -p $PID -o ppid=)
# /sbin/init always has a PID of 1, so if you reach that, the current PID is
# the top-level parent. Otherwise, keep looking.
if [[ ${PARENT} -eq 1 ]] ; then
echo ${PID}
else
get-top-parent-pid ${PARENT}
fi
}
function bring-window-to-top() {
osascript<<EOF
tell application "System Events"
set processList to every process whose unix id is ${1}
repeat with proc in processList
set the frontmost of proc to true
end repeat
end tell
EOF
}
Вы можете запустить:
bring-window-to-top $(get-top-parent-pid)
Быстрый тест с использованием:
sleep 5; bring-window-to-top $(get-top-parent-pid)
и обменять на что-нибудь другое. Через 5 секунд терминал, запускающий ваш скрипт, будет отправлен в начало.
Я не думаю, что ваш процесс без окон имеет какое-либо отношение к главному окну Terminal.app. Возможно, вы могли бы найти способ настроить терминал, независимо от вашей командной строки. –
Я уверен, что в настольном какао есть такой API; просто не помню. –
@NicolasMiari мой процесс без окон - это дочерний процесс приложения Terminal. – mikemaccana