Objective c 从目标C执行命令

Objective c 从目标C执行命令,objective-c,macos,cocoa,command-line,Objective C,Macos,Cocoa,Command Line,我想从objective C(Cocoa框架)执行一个命令。我正在尝试的命令如下所示。我尝试使用NSTask,但执行时它会显示“启动路径不可访问” sudo ifconfig en0 down 我的代码是: - (void)testme { NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath: @"sudo ifconfig en0 down"]; NSArray *arguments; arguments = [

我想从objective C(Cocoa框架)执行一个命令。我正在尝试的命令如下所示。我尝试使用NSTask,但执行时它会显示“启动路径不可访问”

sudo ifconfig en0 down 
我的代码是:

- (void)testme {
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"sudo ifconfig en0 down"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"foo", @"bar.txt", nil];
[task setArguments: arguments];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"command returned:\n%@", string);

[string release];
[task release];

}
sudo ifconfig en0 down
不是一条合理的启动路径。此命令的正确启动路径为
/usr/sbin/sudo

完成后,仍然需要将正确的参数传递给
setArguments:
foo
bar.txt
看起来像是未经阅读就复制的示例代码


但是,更重要的是,从NSTask运行
sudo
将不起作用。
您需要使用来启动特权命令。

您需要指定完整的可执行路径,并且应该将参数指定为参数,而不是与启动路径一起指定
NSTask
不是一个shell,它在内部使用syscalls(
execv()
,我猜)来调用命令

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/sudo"];

NSArray *arguments = @[@"ifconfig", @"en0", @"down"];
[task setArguments:arguments];

好啊我可以通过“char*command=“sudo ifconfig en0 down”;system(command);”运行它,但它会询问我系统管理员凭据。知道怎么摆脱它吗?你不能。使用授权服务。