Shell实际上是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
简单介绍一下Mac系统下如何使用Shell命令开发终端软件,首先简单写一个界面,顶部的文本框输入待执行的Shell命令,选择;选择默认目录按钮表示Shell命令执行的目录,点击Shell命令即可执行命令。效果如下,我们选择了Desktop,然后执行了ls,在底部的文本框内显示了桌面所有的文件(不包括隐藏的文件)
选择目录的代码如下,选择完成后,记录当前选择的path
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
openPanel.canChooseDirectories = YES;
NSInteger result = [openPanel runModal];
if(result == NSModalResponseOK) {
_currentUrl = openPanel.URL;
}
NSTask执行Shell命令
self.task = [[NSTask alloc] init];
self.task.arguments =@[@"-l", @"-c", self.shellTextview.stringValue];
self.task.launchPath = @"/bin/bash";
self.task.currentDirectoryURL = _currentUrl;
然后创建NSPip接收NSTask的输入,同时接收异常输出
NSPipe *outPip = [[NSPipe alloc] init];
[self.task setStandardOutput:outPip];
NSPipe *errorPip = [[NSPipe alloc] init];
[self.task setStandardError:errorPip];
[self.task launch];
[self.task waitUntilExit];
将输入结果转换成NSString显示
NSData *outData = [[outPip fileHandleForReading] availableData];
[outPip.fileHandleForReading readInBackgroundAndNotify];
NSData *errorData = [[errorPip fileHandleForReading] availableData];
[errorPip.fileHandleForReading readInBackgroundAndNotify];
NSString *outString = [[NSString alloc] initWithData:outData encoding:NSUTF8StringEncoding];
NSString *errorString = [[NSString alloc] initWithData:errorData encoding:NSUTF8StringEncoding];
if(outString.length > 0) {
self.resultTextView.textColor = [NSColor blackColor];
self.resultTextView.string = outString;
}
效果如下: