1

Я написал AppleScript, который позволяет мне создавать резервные копии определенного файла. Сценарий прекрасно работает в редакторе AppleScript: он делает то, что должен делать отлично. Все идет нормально.

Теперь я хотел бы запустить этот скрипт через определенные промежутки времени. Поэтому я использую launchctl & .plist, чтобы это произошло. Вот тут и начинается беда.

  • скрипт загружается через заданный интервал с помощью launchctl
  • редактор AppleScript (когда он открыт) выводит свое окно (с этим сценарием) на передний план, но код не выполняется
  • когда редактор AppleScript не работает, кажется, ничего не происходит вообще

Есть идеи, почему это не работает?

-

После редактирования (согласно советам Дэниэла Бека) мой список теперь выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>com.opera.autosave</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/Users/user_name/Library/Scripts/opera_autosave_bak.scpt</string>
</array>
<key>StartInterval</key>
<integer>30</integer>
</dict>
</plist>

и AppleScript, который я пытаюсь запустить:

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

--only run this script when Opera is running
if appIsRunning("Opera") then
    set base_path to "user_name:Library:Preferences:Opera Preferences:sessions:"
    set autosave_file to "test.txt"
    set autosave_file_old to "test_old.txt"
    set autosave_file_older to "test_older.txt"
    set autosave_file_oldest to "test_oldest.txt"
    set autosave_path to base_path & autosave_file
    set autosave_path_old to base_path & autosave_file_old
    set autosave_path_older to base_path & autosave_file_older
    set autosave_path_oldest to base_path & autosave_file_oldest
    set copied_file to "test copy.txt"
    set copied_path to base_path & copied_file

    tell application "Finder"
        duplicate file autosave_path
        delete file autosave_path_oldest
        set name of file autosave_path_older to autosave_file_oldest
        set name of file autosave_path_old to autosave_file_older
        set name of file copied_path to autosave_file_old
    end tell

end if

2 ответа2

1

Сохраните сценарий как приложение в редакторе AppleScript (« Файл»> «Сохранить как…») или измените вызов в своем файле launchd plist чтобы открыть osascript (Терминальный способ выполнения AppleScript) с файлом сценария в качестве аргумента.

0

Кажется, это зависит от:

Поэтому, если вы запускаете сценарий «вручную» - будь то из редактора AppleScript, изнутри Automator, или как отдельное приложение, или как капелька - он должен иметь возможность делать все, что в нем написано, так же, как сегодня. Другими словами, вы сможете продолжать выполнять сценарии вручную, как всегда.

Внутренние сценарии приложения. Некоторые приложения используют «внутренние» сценарии AppleScripts для выполнения своих собственных действий. (Например, BBEdit () использует такие сценарии при установке инструментов командной строки.) Такие скрипты встроены в приложение; Вы никогда не увидите их в меню или где-либо еще. Такие самоссылающиеся сценарии должны продолжать работать, как и всегда.

Однако, если изолированное приложение хочет использовать AppleScript для взаимодействия с другим приложением или с другими частями вашей системы - например, с приложением меню, которое использует AppleScripts для управления iTunes, - тогда вступят в силу новые ограничения. Приложение в изолированной программной среде не может использовать AppleScript для связи с другим приложением на вашем Mac, если только разработчик специально не запрашивает (и не получает) разрешение на это.

http://www.macworld.com/article/1165641/how_increased_mac_security_measures_will_impact_applescript.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .