美文网首页
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