Applescript 没有保存文件的权限

Applescript has no permissions to save file

我正在尝试编写将 .numbers 文档转换为 .csv 文档的脚本。它需要可从命令行执行,以便我可以在预提交 git 挂钩中使用它。

我已经编写了一个 AppleScript 来获取数字文件的路径并将其导出为 CSV,但实际导出不起作用,因为 "You don’t have permission. (6)"。我认为这与沙盒有关,但我不能使用 AppleScript 弹出文件选择器,因为这需要完全自动化。

如何授予我的 AppleScript 导出到该文件的权限?

on run argv
    set input_file to item 1 of argv

    set output_file to input_file
    --strip off the .numbers extention
    set delims to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "."
    if output_file contains "." then set output_file to (text items 1 thru -2 of output_file) as text
    -- set the extension to be csv
    set output_file to output_file & ".csv"
    set output_file to POSIX file output_file

    tell application "Numbers"
        activate
        tell (open input_file)
            set activeDocument to it
                with timeout of 3 seconds
                    export activeDocument as CSV to output_file
                end timeout
            close activeDocument saving yes
        end tell
    end tell
end run

完整的错误信息是 export_numbers_to_csv.scpt:604:676: execution error: Numbers got an error: The document “DisplayPlusButtonTestScripts.numbers” could not be exported as “DisplayPlusButtonTestScripts”. You don’t have permission. (6)

我的调用是 osascript export_numbers_to_csv.scpt /Users/me/Test\ Scripts/MyTests.numbers 来自工作目录 /Users/me/.

我确实有权写入我要求脚本写入的目录。我还尝试导出到一个临时目录(通过 path to temporary items from user domain),但得到了相同的错误消息。

如果 .csv 文件已存在于同一目录中并且与您尝试导出到的文件具有相同的名称,则权限可能会变得混乱。如果您创建了该 .csv 文件或至少 edited/opened 它在某个时候,那么您将有权导出到该名称,但如果它以前从未在您的计算机上打开过写访问权限(例如,如果您下载了),那么必要的权限就没有了。

要解决这个问题,您可以在脚本中的 'tell application "Numbers"' 块之前添加以下行:

open for access file output_file
close access file output_file

这会告诉脚本打开文件进行写访问,因为只需要打开它来获得必要的权限,它就会关闭它。