Как я могу сделать что-то позже, но заставить яблочный скрипт вернуться сейчас? - PullRequest
1 голос
/ 21 января 2010

У меня есть appleScript, который делает что-то похожее на:

using terms from application "iChat"
  on logout finished
    delay 30
    … do some stuff
  end logout finished
end using terms from

Проблема этого скрипта в том, что он также блокирует приложение, вызывающее его на 30 секунд. Затем я хотел бы сказать что-то вроде «через тридцать секунд, пожалуйста, запустите этот скрипт для меня», а затем переместите все мои … do some stuff в этот другой скрипт. Но я не вижу, как это сделать?

Есть предложения?

1 Ответ

1 голос
/ 26 января 2010

Поскольку вы используете Mac, я предполагаю, что у вас установлен Ruby.

То, о чем вы говорите, звучит так, будто вы хотите, чтобы поток спал в течение 30 секунд, а затем выполнял скрипт в фоновом режиме.

Вы должны поместить … do some stuff в скрипт с именем dostuff.scpt и поместить его на рабочий стол.

Затем измените ваш текущий скрипт на следующий код:

using terms from application "iChat"
 on logout finished
  do shell script "ruby -e 'Thread.new {`sleep 30 && osascript ~/Desktop/dostuff.scpt`}' &> /dev/null"
 end logout finished
end using terms from

Кодовая разбивка: Сценарий do shell (выполняет что-то из командной строки)

ruby ​​-e (выполняет код ruby ​​из командной строки)

Thread.new (создает новый поток для скрытия в фоновом режиме)

`(все в обратном кавычке является командой оболочки в ruby)

osascript (выполняет яблочный скрипт из командной строки)

~ / Desktop / dostuff.scpt (указывает путь к вашему файлу, тильда заменяет ваш домашний каталог, и я предполагаю, что вы положили dostuff.scpt на рабочий стол)

&> / dev / null ( Говорит Applescript не искать вывод и немедленно переходить к следующей строке кода )

Я пытался сделать это без Руби, но мне не повезло. Дайте мне знать, если это работает для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...