【问题标题】:Notification message not displaying after a bash script runs on Mac OS X在 Mac OS X 上运行 bash 脚本后不显示通知消息
【发布时间】:2016-10-03 14:14:38
【问题描述】:

我有一个 Launchdaemon 和脚本,可以在从 App Store 下载应用程序时删除它。

所以应用程序下载并在下载时自动删除。应显示给最终用户的通知消息,但不会显示。有人可以帮忙吗?

这是脚本:

#!/bin/bash

Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2)    

if [ $Version -ge 12 ]
then  
launchctl unload /Library/LaunchDaemons/net.sierra.plist
rm -f /Library/LaunchDaemons/net.sierra.plist
rm -f /usr/local/bin/sierra.sh
exit 0

else
rm -rf /Applications/Install\ macOS\ Sierra.app/
osascript -e 'tell app "System Events" to display dialog "macOS Sierra is not allowed on computers at this time."'
fi

如果我创建一个名为
的测试目录,我会补充一点 /Applications/Install\ macOS\ Sierra.app 它会自动删除它并且您会收到显示消息。

谢谢

【问题讨论】:

  • 您确定路径和名称吗?对于 Yosemite,它是“Applications/Installer\ OS\ X\ Yosemite”,而对于 El Capitain,它是“Applications/Installer\ OS\ X\ El\ Capitain”。除此之外,我认为可能是该过程在后台。您是否尝试过使用“告诉应用程序“Finder””。您应该添加的最后一个细节:图标 0 按钮 {“OK”} 默认按钮“OK”(它会给您一个停止图标,只有 1 个按钮而不是 Cancel/OK。
  • 我会使用 find 命令来搜索“Sierra.app”。不管它的路径如何,如果它存在并且版本是所需的数字,则将其删除。如果您需要语法方面的帮助,请告诉我。
  • @pbell - 是的,路径和名称是正确的。我也尝试过同样问题的“finder”。
  • @misteralexander - 这听起来很有用,是的,如果你能提供帮助,那就太好了。谢谢

标签: bash applescript launchd


【解决方案1】:

试试这个:

    #!/bin/bash
    VERSION=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2)

    if [[ "$VERSION" -ge '12' ]]
        then
            echo "TRUE LOGIC RUNNING"
            #launchctl unload /Library/LaunchDaemons/net.sierra.plist
            #rm -f /Library/LaunchDaemons/net.sierra.plist
            #rm -f /usr/local/bin/sierra.sh
        else
            echo "FALSE LOGIC RUNNING"
            #find '/Applications' -type 'f' -name 'Sierra.app' -exec rm -f '{}' \;         #osascript -e 'tell app "System Events" to display dialog "macOS Sierra is not allowed on computers at this time."'
    fi

您可以在看到正在运行的逻辑部分后取消注释代码。然后,逐步检查它并逐步排除故障,看看您的错误在哪里。

另外,您不需要exit 0,因为脚本将自动退出并显示状态为零代码。如果您有逻辑测试状态代码,您通常需要输入exit 1,以便其他一些正在运行的进程可以将其输入到其逻辑中。

【讨论】:

  • 我使用了您的脚本,.app 既没有删除,也没有出现消息。我试过取消注释每一行,同样的问题发生了。我不确定你在哪里可以看到哪个“正在运行的逻辑部分”是什么意思?
  • 是的,您应该在终端中看到一条消息,上面写着“TRUE LOGIC RUNNING”或“FALSE LOGIC RUNNING”。如果您的“版本”大于或等于“12”,您将收到真实消息,如果您的版本低于 12,您将看到错误消息。由于这些是“回声”语句,您只需在终端中看到它们,而不是在 GUI 弹出窗口或其他东西中。
  • 另外,我发现this link 解释说您可以直接运行“sw_vers -productVersion”而不是尾部并剪切以获取版本号。只是想减少所需的步骤。
猜你喜欢
  • 2016-11-25
  • 1970-01-01
  • 2011-02-07
  • 2016-01-02
  • 2014-11-05
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2011-11-21
相关资源
最近更新 更多