Отправить содержимое текстового поля на терминал, затем отобразить ответ в текстовой метке - PullRequest
0 голосов
/ 03 июля 2010

Вот код:

- (IBAction) charlieImputText:(id)sender {

NSAppleScript *keystrokeReturn = [[NSAppleScript alloc] initWithSource:@"tell application \"System Events\" to keystroke return"];
[keystrokeReturn executeAndReturnError:nil];

[progressBarText startAnimation:self];

charlieImputSelf = [sender stringValue];

NSAppleScript *sendCharlieImput = [[NSAppleScript alloc] initWithSource:[NSString stringWithFormat:@"tell application \"Terminal\" to do shell script %@", charlieImputSelf]];
[sendCharlieImput executeAndReturnError:nil];

NSDictionary* errorDict;
NSAppleScript* script=[[NSAppleScript alloc] 
                       initWithContentsOfURL:[NSURL fileURLWithPath:@"/applications/jarvis/scripts/getTextCharlieResponce.scpt" ]
                       error:&errorDict];
NSAppleEventDescriptor* desc=[script executeAndReturnError:&errorDict];
NSString* result=[desc stringValue];
self.charlieOutput.stringValue = result;
charlieOutput.textColor = [NSColor greenColor];
[script release];

[progressBarText stopAnimation:self];
}

Хорошо, что он делает, он отправляет все, что в текстовом поле, на терминал и отображает ответ терминала на текстовой метке.Однако это не работает так, как я хочу.Он не отправляет пользовательский ввод на терминал.Есть идеи?

Ответы [ 2 ]

1 голос
/ 03 июля 2010

Вам нужно процитировать аргумент do shell script. Кроме того, это зависит от наличия каталога по пути /Applications/jarvis/scripts, что довольно странно, но не невозможно.

0 голосов
/ 03 июля 2010

Первое: charlieImputSelf соответствует ожидаемому значению?

Второе: попробуйте передать NSError в ваш [sendCharlieImput executeAndReturnError:nil]; Сделайте что-то вроде:

NSAppleEventDescriptor * ourRes = [theScript executeAndReturnError: &errorDict];
if (ourRes == nil)
{
    // error...
    [NSApp activateIgnoringOtherApps: YES];
    showNSAlert( @"AppleScript error", [errorDict valueForKey:NSAppleScriptErrorMessage]);
}

(я оставлю вас предоставитьреализация showNSAlert, или просто используйте NSLog здесь ...)

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