以下是代码:
- (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];
}
好的是,它将文本字段中的内容发送到终端,并在文本标签上显示终端的响应。但是,这不符合我的要求。它不会将用户输入发送到终端。有什么想法吗?
答案 0 :(得分:1)
您需要将参数引用到do shell script
。此外,这取决于路径/Applications/jarvis/scripts
上有一个目录,这有点奇怪,但并非不可能。
答案 1 :(得分:0)
首先: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 ...)