使用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 Desktop
JanaChen'sMac:~ JanaChen$ mkdir helloWorld
使用NSTask调用:
// 这种调用方式结果是错误的,因为一条命令执行完Task就会销毁,相当于输入完终端关闭,再打开再输出,这时执行第二条语句时第一条语句已经不起作用了
[self cmd:@"cd Desktop"];
[self cmd:@"mkdir helloWorld"]; // 应使用下面这种方式实现
[self cmd:@"cd Desktop; mkdir helloWorld"];
使用NSTask调用shell的更多相关文章
- perl 调用shell脚本
perl调用shell命令 perl调用shell shell调用perl Perl执行shell命令的几种方式及其区别
- 【原】Gradle调用shell脚本和python脚本并传参
最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...
- 调用shell脚本,IP处理
//调用shell脚本,IP处理 package com.letv.sdns.web.utils; import org.slf4j.Logger; import org.slf4j.LoggerFa ...
- python 调用 shell 命令方法
python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 ...
- Awk中调用shell命令
Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...
- C程序调用shell脚本共有三种方法
C程序调用shell脚本共有三种法子 :system().popen().exec系列函数call_exec1.c ,内容为:system() 不用你自己去产生进程,它已经封装了,直接加入自己的命令e ...
- 【转载】如何在C语言中调用shell命令
转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非 ...
- AWK调用SHELL,并将变量传递给SHELL
在Shell脚本中调用awk是非常自然和简单的,以前还写过一个关于awk/shell相互传递变量的文章:awk与shell之间的变量传递方法在awk脚本中,如果需要调用shell脚本/命令,则需要使用 ...
- [转] Makefile中调用Shell
1.在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的.比如如下代码就是没有任何输出: VAR="Hello" echo "$(VAR)&q ...
随机推荐
- jquery图片左右来回循环飘动
$(function () { function left_right() { $("#sc1452").animate({'left':'-=100'},5000).delay( ...
- SpringUtils写法
@Componentpublic class SpringUtils implements ApplicationContextAware { @Override public void setApp ...
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
这片文章也有塞尔维亚-克罗地亚语(由Jovana Milutinovich翻译)和日语(由@noradaiko翻译) 如果有个一个网络库能够自动的为你处理cache该有多好啊. 如果有一个网络库能够在 ...
- Unity Step by Step(一)
要打败敌人,首先要了解敌人,这不是我说的,这是孙子说的.^_^ 首先,我一头雾水,所以我就下了个demo,demo会在下面附上,声明,这不是我写的,我也是下载别人的,地址:http://game.ce ...
- Windows Server 2008R2 设置SMTP邮件转发服务
最近因业务需求在Windows Server 2008R2server上设置SMTP转发服务,主要是在业务审批过程中邮件通知相关人员审批情况, 1.在server上加入服务 2.打开服务 3.新建一个 ...
- html嵌套规则
本人半路出家的 今天学习js的时候写了一个a嵌套a标签结果js报错 一直找不到原因 专门找了一下html嵌套规则看了一下 1.块级元素 一般用来搭建网站架构.布局.承载内容……它包括以下这些标签: ...
- 关于finfo_file函数获取文件mime值验证出错的问题
今天在做图片上传 验证图片mime值时 突然发现 个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...
- 【转】Linux上的free命令详解
解释一下Linux上free命令的输出.默认输出是KB,可以用free -m则输出是MB 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO ...
- php跳转
header("Location: http://bbs. lampbrother.net"); header("refresh:0;url=./login.php&qu ...
- 配置hadoop用户SSH无密码登陆 的2种方式 落脚点是 可以ssh免密进入的主机名写入动作发出主机的 known_hosts,而被无密进入主机的authorized_keys文件 免密登录
cat /proc/versionLinux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version ...