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