Синтаксис Applescript (несколько аргументов) внутри файла Objective-C

Я работал над попыткой запустить Applescript из Objective-C, который запрашивает у терминала запуск некоторых команд оболочки. Я сталкиваюсь с вопросом о том, как отформатировать команду в Objective-C, чтобы на объект скрипта ссылались правильно.

Вот как сценарий выглядит как яблочный скрипт

set thisFile to "Dev1.4"
set testTarget to "/Users/lab/Desktop/untitled"
do shell script     "/Users/lab/Desktop/TempRoot/myCommand.command " & thisFile & space & testTarget with administrator privileges

Этот сценарий был протестирован и проверен в одном из моих предыдущих вопросов о передаче нескольких команд из файла appleScript в командный файл терминала ( передача нескольких параметров из Applescript в командный сценарий терминала).

Моя попытка кодирования Objective C ниже:

NSObject *arrayObj = arguments[0];

NSString *tmpString1 = [arguments objectAtIndex:0];
NSString *tmpString2 = [arguments objectAtIndex:1];

NSString * fullScript = [NSString stringWithFormat:@"'%@' & get quoted form of %@ & space & get quoted form of %@", scriptPath, tmpString1, tmpString2];

NSDictionary *errorInfo = [NSDictionary new];
NSString *script =  [NSString stringWithFormat:@"do shell script \"%@\" with administrator privileges", fullScript];

NSLog(script);

NSAppleScript *appleScript = [[NSAppleScript new] initWithSource:script];
NSAppleEventDescriptor * eventResult = [appleScript executeAndReturnError:&errorInfo];

Если бы кто-нибудь мог сказать мне, как правильно отформатировать эту строку, которая создает полный сценарий, это было бы очень признательно!

NSString * fullScript = [NSString stringWithFormat:@"'%@' & get quoted form of %@ & space & get quoted form of %@", scriptPath, tmpString1, tmpString2];

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, или, если вам нужна дополнительная информация.

-------------------------------------------------- --------------------------------

-------------------------------------------------- --------------------------------

РЕДАКТИРОВАТЬ:

Я обнаружил некоторую новую информацию относительно проблемы. Кажется, что с ответом @ShooTerKo проблема синтаксиса решена. Однако то, что приводит к сбою яблочного скрипта, заключается в том, что путь к файлу не распознается в Applescript, потому что яблочный скрипт не любит пробелы в именах путей к файлам.

Например:

set testTarget to "/Users/lab/Desktop/Problem Folder"
set thisFile to "Dev1.4"
do shell script "/Users/lab/Desktop/TempRoot/myCommand.command " & thisFile & space & testTarget with administrator privileges

заставит яблочный скрипт только сохранять

“/Users/lab/Desktop/Problem”

в качестве переменной и, следовательно, не получить правильный путь. Это можно найти в моем режиме отладки с этой ошибкой ниже:

Printing description of errorDescription->*errorDescription:
/bin/sh: /Users/lab/Library/Developer/Xcode/DerivedData/Branch_Copier_GUI-fqaphewyolyltbehjgtknknowmrr/Build/Products/Debug/Branch: No such file or directory

Я подумаю над тем, чтобы переименовать свой проект, чтобы включить подчеркивания, которые будут более корректно интерпретироваться appleScript, и проведу дополнительные исследования этой новой ошибки. Еще раз спасибо за помощь, я действительно ценю это!

1 ответ

Решение

Какое значение показано NSLog(fullScript);? Я думаю, что вы получите

[...] get quoted form of Dev1.4 [...]

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

NSString * fullScript = [NSString stringWithFormat:@"%@ '%@' '%@'", scriptPath, tmpString1, tmpString2];

Надеюсь, это поможет, Майкл / Гамбург

Другие вопросы по тегам