将文本字段的内容发送到终端,然后在文本标签中显示响应

时间:2010-07-02 23:20:22

标签: objective-c

以下是代码:

- (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 个答案:

答案 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 ...)