2014-11-08 3 views
1

Вот мой маленький тестовый скрипт:Osascript - Нет выхода

do shell script "cd ~/Desktop; ls -l1" 
set x to the result 
tell application "Finder" to activate 

Когда я бегу это с помощью редактора сценариев, он отлично работает.

Когда я пытаюсь сделать то же самое через терминал, например osascript myscript.scpt, он вообще не работает - никакого выхода вообще нет.

Btw, я пробовал даже использовать его с помощью NSTask Cocoa. Один раз он работал, а затем он возвращал странное сообщение об ошибке Class _NSZombie_OS_xpc_data is implemented in both ?? and ??. One of the two will be used. Which one is undefined. (osascript не Cocoa).

Что происходит?


P.S. я не знаю, что ли отношение вообще, но после попытки top в терминале я заметил экземпляр osascript работает (?!), хотя убийство его не делать ничего хорошего либо ...

ответ

1

Когда вы используете команду osascript, вы получаете только результат последней команды AppleScript.

Итак, последняя команда tell application "Finder" to activate, эта команда ничего не возвращает.

Чтобы получить результат команды do shell script, используйте:

set x to do shell script "cd ~/Desktop; ls -l1" 
tell application "Finder" to activate 
return x 
+0

ОК, так как я сделал большой прогресс, так как я первый отвечал на этот вопрос. Позвольте мне сказать так: есть ли другой способ получить промежуточные события/ответы из 'osascript' (НЕ конечный результат), кроме использования' AEDebugReceives = 1'? –

+0

Вы можете вернуть много переменных, которые содержат текст или цифры следующим образом: 'return var1 & linefeed & var2 & linefeed & var3', иначе я не знаю другого способа. – jackjr300

+0

Если вы запустите тот же самый сценарий выше (не возвращая ничего), вы заметите, что он также выводит промежуточные события (под вкладками «события» и «ответы». Один из способов получить этот вывод - установить «export AEDebugReceives = 1 'в терминале, перезапустите Finder и перезапустите скрипт, как обычно, (например,' osascript yourscript.scpt') Попробуйте это ;-) –