У меня есть скрипт AppleScript, который я использую для отображения информации о дорожке iTunes на моем рабочем столе с помощью GeekTool. Я использую 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
Я могу это временно исправить, внеся некоторые изменения в сценарий вручную (например, добавив пустые строки), но через две недели все снова выходит из строя, потому что Лев его блокирует.
Я мог бы теоретически отключить блокировку файлов по всей системе, чтобы это исправить, но я бы предпочел этого не делать - мне это нравится для других вещей.
Итак, как вы можете использовать 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