gpt4 book ai didi

objective-c - 从 objective-c 运行 sudo 命令

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:46 24 4
gpt4 key购买 nike

如何从 objective-c 运行 sudo 命令?我可以使用以下方法运行不需要 sudo 的简单命令:

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

NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil];


NSLog(@"run command: %@",cmd);
[task setArguments: arguments];

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

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
return output;

当我运行 sudo 命令时,出现错误:不允许操作。

根据我在网上找到的信息,我需要获得授权。我阅读了 Apple 的授权文档,但没有指定声明点。

Apple 的示例 EvenBetterAuthorizationSample 不起作用。

应用程序已使用 Apple ID 签名。

最佳答案

你应该学习 Authorization Services Programming Guide , 但如果您想使用 sudo 来执行此操作,则可以。

sudo 需要的是授权执行的密码,它通常从终端 获取密码 - 这与标准相同尽管在命令外壳中输入,但默认情况下标准输入也连接到终端。 sudo-S 选项指示它从标准输入读取密码。

根据您现有的设计,您可以:

1)在sudo命令中加入-S

2) 密码提示和任何错误信息,如密码无效,将由sudo写入标准错误。创建一个管道并将其附加到任务 standardError,或者将您现有的管道附加到 standardOutputstandardError,以捕获此输出。

3) 创建另一个管道并将其附加到任务standardInput。将密码后跟换行符写入该管道。当任务运行时,sudo 将读取密码并执行您的命令。当然,如果命令本身需要也将从管道中读取的输入,那么您必须将其写入管道。

HTH

关于objective-c - 从 objective-c 运行 sudo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com