該方法傳入一個NSString類型的命令字元串,返回運行結果。但是使用這種方法沒法記憶上一次操作,沒法做到像在終端中執行多次命令那樣自如。 例如:先cd到桌面,然後在桌面新建文件夾,在終端中我們是這麼實現的: 使用NSTask調用: ...
- (NSString *)cmd:(NSString *)cmd { // 初始化並設置shell路徑 NSTask *task = [[NSTask alloc] init]; [task setLaunchPath: @"/bin/bash"]; // -c 用來執行string-commands(命令字元串),也就說不管後面的字元串里是什麼都會被當做shellcode來執行 NSArray *arguments = [NSArray arrayWithObjects: @"-c", cmd, nil]; [task setArguments: arguments]; // 新建輸出管道作為Task的輸出 NSPipe *pipe = [NSPipe pipe]; [task setStandardOutput: pipe]; // 開始task NSFileHandle *file = [pipe fileHandleForReading]; [task launch]; // 獲取運行結果 NSData *data = [file readDataToEndOfFile]; return [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; }
該方法傳入一個NSString類型的命令字元串,返回運行結果。但是使用這種方法沒法記憶上一次操作,沒法做到像在終端中執行多次命令那樣自如。
例如:先cd到桌面,然後在桌面新建文件夾,在終端中我們是這麼實現的:
JanaChen'sMac:~ JanaChen$ cd Desktop
JanaChen'sMac:~ JanaChen$ mkdir helloWorld
使用NSTask調用:
// 這種調用方式結果是錯誤的,因為一條命令執行完Task就會銷毀,相當於輸入完終端關閉,再打開再輸出,這時執行第二條語句時第一條語句已經不起作用了 [self cmd:@"cd Desktop"]; [self cmd:@"mkdir helloWorld"]; // 應使用下麵這種方式實現 [self cmd:@"cd Desktop; mkdir helloWorld"];