美文网首页
Mac之Shell命令

Mac之Shell命令

作者: Visitor | 来源:发表于2018-10-07 14:39 被阅读341次

Shell实际上是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。

简单介绍一下Mac系统下如何使用Shell命令开发终端软件,首先简单写一个界面,顶部的文本框输入待执行的Shell命令,选择;选择默认目录按钮表示Shell命令执行的目录,点击Shell命令即可执行命令。效果如下,我们选择了Desktop,然后执行了ls,在底部的文本框内显示了桌面所有的文件(不包括隐藏的文件)

181538893679_.pic_hd.jpg

选择目录的代码如下,选择完成后,记录当前选择的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;
    }

效果如下:


Screen Shot 2018-10-07 at 2.37.37 PM.png

相关文章

网友评论

      本文标题:Mac之Shell命令

      本文链接:https://www.haomeiwen.com/subject/wfelaftx.html