AppleScript как .app не принимает аргументы из командной строки

Я пытаюсь обработать аргументы командной строки в AppleScript. script работает, если я запускаю его с помощью osascript TestArgs.scpt a.txt b.txt. Но если я сохраню script как .app и запустил его из командной строки, он не покажет никаких аргументов: open -a TestArgs --args a.txt b.txt не работает. Я также пробовал несколько вариантов script без успеха.

on run argv
 set argc to 0
 try
 set argc to (count of argv)
 end try
 tell application "Finder" to display dialog ("Argument Count: " & argc as string)
end run

Кажется, что проблема связана с OSX 10.8, так как тот же script работает, как и ожидалось, на 10.7

Где моя ошибка?

Спасибо и с уважением.

2 ответа

Это способ сделать это с помощью JXA (JavaScript for Automation), который может быть приемлемым решением. Он использует мост Objective-C, поэтому это возможно и с AppleScript. Это было главным образом взято из Поваренной книги JXA.

Эквивалентный JXA для AppleScript в этом вопросе будет использовать:

function run(argv) {
 …
}

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

ObjC.import('Foundation')
const args = $.NSProcessInfo.processInfo.arguments
const argv = []
const argc = args.count
for (let i = 0; i < argc; i++) { argv.push(ObjC.unwrap(args.objectAtIndex(i))) }
delete args

Пользовательские аргументы будут начинаться с argv[1], так как argv[0] будет сам апплет.


Почему вы не используете osascript с приложением? Это работает. У вас в основном есть 2 способа передать аргументы. Эти работы для scpt или app...

1) из командной строки: osascript/path/to/ script arg1 arg2

2) из ​​другого script: запустите script путь к файлу: до: script с параметрами {arg1, agr2}.

licensed under cc by-sa 3.0 with attribution.