gpt4 book ai didi

applescript - 防止 AppleScript 脚本在使用传递的参数时更改自己的修改日期

转载 作者:行者123 更新时间:2023-12-04 19:16:05 28 4
gpt4 key购买 nike

我有一个 AppleScript 脚本,用于在我的桌面上使用 GeekTool 显示 iTunes 轨道信息。我用 on runargv将不同的参数传递给脚本,这样我就可以在不复制脚本的情况下显示轨道信息的不同部分(例如,我可以通过运行 osascript itunes.scpt title 来获取标题,我可以通过运行 osascript itunes.scpt album 来获取艺术家/专辑) .

然而,每次我运行带有参数的脚本时,实际的文件修改日期都会改变——似乎脚本正在给自己写一些东西或进行某种修改。

这通常不是问题,除了在 OS X 10.7 中,Lion 为超过 2 周未修改的文件引入了文件锁定。一旦我的 iTunes 脚本被操作系统锁定,它在运行时就无法再进行这些不可见的自我更新,并且我的系统日志中充满了如下错误:

osascript: couldn't save changes to script /path/to/script: error -54

我可以通过手动对脚本进行一些修改来临时解决这个问题(例如,添加空行),但两周后它又再次崩溃了,因为 Lion 锁定了它。

理论上我可以在系统范围内禁用文件锁定来解决这个问题,但我宁愿不这样做——我喜欢它用于其他事情。

那么,如何使用 on run argv将参数传递给 AppleScript 文件而不更改该脚本的修改日期?

这是一个最小的工作示例。如果您从命令行 ( oscascript test.scpt blah ) 运行它,脚本的修改日期将会改变。
--test.scpt
on run argv
tell application "iTunes"
if player state is playing then
set trck to current track
set title_text to (get name of trck)
return title_text & " " & item 1 of argv
end if
end tell
end run

最佳答案

除了在常规 AppleScript(不是 Xcode 变体)中定义的属性外,所有全局变量都是持久的,并与脚本一起保存(至少在重新编译之前)。这包括在 中定义的项目。运行处理程序(显式或隐式),例如:

on run
try
display dialog someVariable -- will error the first time
on error -- set global
beep
set someVariable to time string of (current date)
end try
end run

您可以尝试将代码移动到处理程序,以便不设置或更改全局变量。

关于applescript - 防止 AppleScript 脚本在使用传递的参数时更改自己的修改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com