Сомнение в отношении псевдонима - PullRequest
2 голосов
/ 12 ноября 2010

Я прочитал в документе «appleScript», что «псевдоним» - это ключевое слово, указывающее, что после компиляции (т.е. проверки синтаксиса) скрипт должен помнить идентификатор файла и после выполнения не должен спрашивать Finder.для файла в месте, указанном указанным путем, но на основе идентификатора.

Поэтому я решил поиграть с ним с помощью этого скрипта -

set samplePath to alias "Mac:Miraaj:eCBTMood:anim1.png"
tell application "Finder"
    open samplePath
end tell

Я скомпилировал этот скрипт и сохранил его как приложение AppleScript.Я выполнил это, дважды щелкнув по нему, и он открыл правильный файл.Затем я изменил имя файла на anim2.png и перезапустил приложение.Я думал, что он должен снова открыть тот же файл, но он выдал эту ошибку:

Файл Mac: Miraaj: eCBTMood: anim1.png не найден

Может кто-нибудь предложить мнеесли я что-то сделал неправильно или неправильно интерпретировал псевдоним?

Спасибо,

Miraaj

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Это будет работать, если вы установите псевдоним как свойство, а не как простую переменную.

Я скопировал ваш скрипт и продублировал поведение, которое вы заметили: если файл перемещен или переименован, скрипт можетбольше не могу его найти.

Затем я изменил скрипт так:

property samplePath : alias "Mimosa:Users:jerry:Desktop:Lost Cities"
tell application "Finder"
    open samplePath
end tell

Теперь приложение скрипта смогло найти файл при его перемещении.И он смог найти файл, когда я его переименовал.

Разница, я думаю, заключается в том, что свойства сохраняются в приложениях при сохранении и между экземплярами, но простые переменные необходимо воссоздавать каждый раз из исходногопуть, который не будет работать, если исходный путь не пройден.

Рассмотрим этот вариант:

set samplePath to alias "Mimosa:Users:jerry:Desktop:Lost Cities"

on idle
    global samplePath
    tell application "Finder"
        open samplePath
    end tell
    return 30
end idle

Он настроен так же, как ваш, но скрипт повторяется каждые тридцать секунд (сохраните его как «Оставайтесь открытыми », чтобы получить такое поведение).Если вы закроете файл, а затем переместите его, скрипт найдет файл на следующей итерации.Он также найдет его, если вы переименуете файл.

Это потому, что сценарию не нужно заново интерпретировать исходный путь к файлу.Он использует сохраненный псевдоним, который сохраняет себя, даже если файл перемещается или переименовывается.

Как только он вернется к тексту вашего скрипта, он потерпит неудачу;даже с изменением «свойства» ссылка будет разорвана, если я снова открою скрипт в редакторе AppleScript, так как он затем попытается переосмыслить исходный, теперь неверный путь.

0 голосов
/ 12 ноября 2010

Документация неверна или, по крайней мере, плохо сформулирована. Приложения Applescript не собираются сохранять эту информацию между средами выполнения; Я не знаю ни одного приложения, которое сохраняло бы эту информацию, если разработчик явно не делает этого.

Если местоположение жестко запрограммировано и файл находится в правильном месте в момент, когда скрипт вызывает псевдоним, вы можете переместить этот псевдоним в любое место, и все будет в порядке. В то же время переименование файла приведет к сбою последующих операций, и поэтому я считаю, что документы плохо сформулированы. В конце концов, как только вы выйдете, вся эта информация исчезнет.

Я все время использую alias в своих скриптах, но я никогда не видел, чтобы он "автоматически" управлял расположением файлов между средами выполнения. У меня всегда должны быть файлы в точном месте, указанном в сценарии.

...