osx安装脚本 - 检测firefox是否正在运行并重启提示

时间:2015-09-08 08:24:26

标签: macos bash firefox package productbuild

我正在为我的应用程序创建一个命令行工具。 它使用pkgbuildproductbuild来创建包。它是一个launchdaemon二进制文件。 我有preinstallpostinstall个脚本。

安装后,可能在postinstall脚本中,我需要检测Firefox是否正在运行,然后提示用户需要重启Firefox。 有可能吗?怎么样?

脚本的一些摘录,它是postinstall脚本的一部分。

.........

## Check if Firefox is running in the background with no tab/window open.


function restart_empty_firefox (){
    echo "Restarting firefox if no tab is opened. "

    firefoxRunning=$(osascript \
        -e 'tell application "System Events" to set fireFoxIsRunning to ((count of (name of every process where name is "Firefox")) > 0)' \
        -e 'if fireFoxIsRunning then' \
        -e 'set targetApp to "Firefox"' \
        -e 'tell application targetApp to count (every window whose (closeable is true))' \
        -e 'else' \
        -e 'return 0' \
        -e 'end if')

    if [ $firefoxRunning -eq 0 ]; then
        echo 'Firefox is in the background with no window and so quitting ...'
        osascript -e 'quit app "Firefox"'
    else 
        ##### show a dialog to the user to restart Firefox
    fi

}

firefox_update # not shown here
restart_empty_firefox

.............

1 个答案:

答案 0 :(得分:2)

您可以使用流程状态(ps)工具:

ps aux | grep '[F]irefox.app' | awk '/firefox$/ {print $2}'

<强>结果

82480

这告诉我们Firefox.app确实正在运行(进程82480)。

编辑:由于您似乎倾向于使用osascript的方向,这是一个示例,要求用户重新启动Firefox(完全控制在他们手中):

#!/bin/bash

osascript <<'END'
set theApp to "Firefox"
set theIcon to "Applications:Firefox.app:Contents:Resources:firefox.icns"

tell application "System Events"
    if exists process theApp then
        display dialog "Warning: Mozilla " & theApp & " should be closed." buttons {"Continue"} with icon file theIcon default button 1
        if the button returned of the result is "Continue" then
        end if
    end if
    display notification "Installation complete" with title "Application Package" subtitle "Please relaunch " & theApp
    delay 3
end tell
END

如果您的脚本具有足够的权限,那么建议使用quit而不是公然删除该进程。最终应该如何做,否则只要求用户请退出并重新启动Firefox本身 - 问题就解决了。