applescript脚本从命令行运行,但在保存到应用程序并双击时不会运行

applescript脚本从命令行运行,但在保存到应用程序并双击时不会运行,applescript,Applescript,我正在尝试编写一个脚本,既可以作为应用程序运行,也可以使用osascript从命令行运行。在这两种情况下,我都想弹出一个“帮助”对话框。对于应用程序,当我双击应用程序时,它应该会弹出。在命令行启动的情况下,我希望在运行没有参数的脚本时,它会弹出(例如:osascript myScript.scpt)。当我双击应用程序时,附加的脚本不会正确弹出对话框,但它可以从命令行工作。如果我只删除第一行上的argv,然后删除第二行上的-,从而模拟argv的存在,双击就可以了。也就是说,使用提供的argv时的行

我正在尝试编写一个脚本,既可以作为应用程序运行,也可以使用osascript从命令行运行。在这两种情况下,我都想弹出一个“帮助”对话框。对于应用程序,当我双击应用程序时,它应该会弹出。在命令行启动的情况下,我希望在运行没有参数的脚本时,它会弹出(例如:osascript myScript.scpt)。当我双击应用程序时,附加的脚本不会正确弹出对话框,但它可以从命令行工作。如果我只删除第一行上的argv,然后删除第二行上的-,从而模拟argv的存在,双击就可以了。也就是说,使用提供的argv时的行为与不使用时的行为完全不同。这是一个错误还是我做错了什么

on run argv             -- if I remove the argv from this line
    --  set argv to []  -- and then comment *in* this line, it works fine
    getDefaults()       -- when I double-click the app

    if (count of argv) = 0 then 
        displayHelp()  -- doesn't display on double click when I use "on run argv"
    else
        processFromCommandLine(argv)
    end if
end run

on displayHelp()
     display dialog "Help!"
end displayHelp
on processFromCommandLine(argv)
end processFromCommandLine

双击脚本应用程序时出错退出,因为arg未分配给可以计数的类,但您尝试获取其计数。只需将其包装在try块中即可

on run argv
    getDefaults()
    try
        get (count of argv)
        processFromCommandLine(argv)
    on error
        displayHelp()
    end try
end run

几乎可以肯定有一种更好的方法,但这种方法有效:

on run argv

    -- Display help.
    if argv = current application or ¬
        argv's class ≠ list or argv's length = 0 then
        display dialog "Help!"
        return
    end if

    -- Do stuff.

end run
看起来
运行处理程序的
直接参数
设置为

  • 当脚本作为应用程序启动时

  • 从脚本编辑器运行时


使用try块测试变量的存在/状态在Applescript中非常常见。