星空网 > 软件开发 > 操作系统

使用NSTask调用shell

- (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 DesktopJanaChen'sMac:~ JanaChen$ mkdir helloWorld

使用NSTask调用:

// 这种调用方式结果是错误的,因为一条命令执行完Task就会销毁,相当于输入完终端关闭,再打开再输出,这时执行第二条语句时第一条语句已经不起作用了[self cmd:@"cd Desktop"];[self cmd:@"mkdir helloWorld"];// 应使用下面这种方式实现[self cmd:@"cd Desktop; mkdir helloWorld"];

 




原标题:使用NSTask调用shell

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Amazon or eBay:两大平台优劣大起底?(上篇):https://www.ikjzd.com/articles/131038
亚马逊运营QA集锦(1304-1313):https://www.ikjzd.com/articles/131039
【广告策略】你可以不知道,但知道一定没有坏处:https://www.ikjzd.com/articles/13106
敏哥:做亚马逊亏掉上百万,揭秘跨境电商行业的那些 “大败局”:https://www.ikjzd.com/articles/131061
2019年德国亚马逊大限将至,你的货怎么办?:https://www.ikjzd.com/articles/13107
震惊!亚马逊跟卖和反跟卖的战争已经延伸到人身攻击上了!:https://www.ikjzd.com/articles/13108
皇家游轮航线 皇家邮轮旅游攻略:https://www.vstour.cn/a/408245.html
2017春节旅游攻略有吗:https://www.vstour.cn/a/408246.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流