【问题标题】:Applescript application hangs on 10.9 when executing a shell command with administrator privileges以管理员权限执行 shell 命令时,Applescript 应用程序在 10.9 上挂起
【发布时间】:2013-10-23 16:30:46
【问题描述】:

我正在 Applescript 应用程序中执行以下行。

set POSIX_path to "/Applications/iPhoto.app"
do shell script "sudo rm -rfv " & quoted form of POSIX_path with administrator privileges

身份验证屏幕按原样弹出,但在验证应用程序后,执行此命令时会冻结。此问题仅在 10.9 中出现。

当我将要删除的文件夹的权限设置为“每个人都可以读写”时,它就可以工作了。

有人知道发生了什么变化吗?

编辑:当我通过检查du -shx /Applications/iMovie.app 重复执行此脚本时,每次尝试都会删除更多文件。

$ open compiled-applescript.app/
$ du -shx /Applications/iMovie.app
1.4G    /Applications/iMovie.app
-- force quit AppleScript --
$ open compiled-applescript.app/
$ du -shx /Applications/iMovie.app
1.3G    /Applications/iMovie.app
-- force quit AppleScript --
$ open compiled-applescript.app/
$ du -shx /Applications/iMovie.app
1.0G    /Applications/iMovie.app

【问题讨论】:

  • 它在 OS X 10.9 (13A603) 上运行良好
  • 如果您从终端执行sudo rm -rfv /Applications/iPhoto.app 会发生什么?这需要多长时间? time sudo rm -rfv /Applications/iPhoto.app
  • 从终端它工作正常,大约需要 18 秒。该问题与 AppleScript 中命令的执行密切相关。
  • 如果省略sudo 会发生什么?我怀疑do shell script 可能正在等待您为 sudo 输入密码。我认为with administrator privileges 应该足以提升权限,也不需要 sudo。不幸的是,我目前没有安装 mvericks 来测试它。
  • 我省略了它。仍然挂起。

标签: macos shell applescript admin osx-mavericks


【解决方案1】:

它在 OS X 10.9 (13A603) 上运行良好

set POSIX_path to "/Users/paragbafna/Desktop/untitled folder"
do shell script "sudo rm -rfv " & quoted form of POSIX_path with administrator privileges  

【讨论】:

  • 我还从 ~/Library/、/private/var/db/ 等系统文件夹中删除(它是一个卸载程序)。该问题已在三台不同的机器上重现。
  • 它可以通过尝试从 /Applications 中删除来轻松复制。
  • 我也在使用 applescript 卸载程序,它的工作正常。我正在从 /Applications 和 /Library/Application\ Support 中删除文件夹。
  • 请使用 iPhoto.app 或 iMovie.app 等系统应用程序试试!
【解决方案2】:

有人知道发生了什么变化吗?

嗯是的.. 看门人变了,这可能是原因..

当我将要删除的文件夹的权限设置为“每个人都可以读写”时,它可以工作。

您是从 Finder 还是从命令行使用 chmod 0777 执行此操作的?后者可能会删除一些Finder不会删除的属性。

在您的计算机上在这里选择了什么设置?

如果您有限制性设置,请尝试“Anywhere”以查看它是否能解决问题。如果这是原因,您可以:

  1. 已安装自定义命令行工具(例如 MacPorts)或您自己编译的工具(因为这发生在 3 台但并非所有计算机上,显然您不是“普通”用户)。
  2. 您的 applescript 不受信任,如果可能,您可以尝试对其进行签名,否则可能会起作用:

    如果用户想要运行被 Gatekeeper 阻止的应用程序,他们有多种选择。实际上,可以通过让 Gatekeeper 运行所有应用程序来关闭它。 高级用户可以选择删除隔离属性或使用 spctl 命令在安全评估策略子系统中添加新策略。 - TrendMicro - about Gatekeeper

  3. 不得已的想法.. 检查您的磁盘权限,如果使用它,请重新安装 Xcode,可能签名已损坏。
  4. 改写一个shell脚本,我不知道是不是只是删除几个文件,那么你绝对可以在shell脚本中完成,或者评论让我知道你想要实现的目标。李>

【讨论】:

  • 1.否 2. 关闭 GateKeeper,它仍然挂起 3. 完成,也不起作用 4. 尝试过,由 AppleScript 执行时仍然挂起
  • 在一台或几台机器上遇到问题时,您应该始终尝试的另一件事是创建一个新用户帐户并查看问题是否仍然存在。
【解决方案3】:

经过几天的尝试来解决这个问题,我终于找到了导致这个问题的原因。

这是 rm 命令的详细选项 (-v)。忽略它会使应用程序再次完美运行。 也许苹果不小心引入了缓冲区溢出。我将在我在 Apple 的 bugtracker 中创建的问题 ID 15309626 下报告此问题。也许他们会在第一个 10.10 DP 之前修复它:D

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多