首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的可可应用程序中运行此命令?

如何在我的可可应用程序中运行此命令?
EN

Stack Overflow用户
提问于 2011-01-08 00:54:42
回答 2查看 820关注 0票数 0

我在NSTask中找到了一些东西来执行一个命令,但是我不能让它工作。

这是我的命令:

代码语言:javascript
复制
ioreg -c BNBMouseDevice | grep BatteryPercent

我如何在我的可可应用程序中运行它?(当然是以编程的方式)

非常感谢你的帮助。

我已经尝试过了:

代码语言:javascript
复制
NSTask *server = [NSTask new];
[server setLaunchPath:@"/bin/sh"];
[server setArguments:[NSArray arrayWithObject:@"ioreg -c BNBMouseDevice | grep BatteryPercent"]];
NSPipe *outputPipe = [NSPipe pipe];
[server setStandardInput:[NSPipe pipe]];
[server setStandardOutput:outputPipe];
[server launch];
[server waitUntilExit];
[server release];
NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile];
NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease]; 

但它显示没有这样的文件或目录,但如果我在终端中执行此操作:

代码语言:javascript
复制
ioreg -c BNBMouseDevice | grep BatteryPercent

它起作用了!

怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-08 02:12:26

在调用/bin/sh时,如果希望外壳程序运行命令,则需要传递-c。它应该等价于:

代码语言:javascript
复制
/bin/sh -c "/usr/sbin/ioreg -c BNBMouseDevice | /usr/bin/grep BatteryPercent"

您可以通过替换

代码语言:javascript
复制
[server setArguments:[NSArray arrayWithObject:@"ioreg -c BNBMouseDevice | grep BatteryPercent"]];

使用

代码语言:javascript
复制
[server setArguments:[NSArray arrayWithObjects:@"-c", @"/usr/sbin/ioreg -c BNBMouseDevice | /usr/bin/grep BatteryPercent", nil]];

注意,我做了两处更改:参数是一个包含两个元素的数组,即" -c“和"/usr/sbin/ioreg -c BNBMouseDevice | /usr/bin/grep BatteryPercent",我还将ioreg替换为/usr/sbin/ioreg (将grep替换为/usr/bin/grep),以明确表示您对这些特定程序感兴趣。

票数 2
EN

Stack Overflow用户

发布于 2011-01-08 01:56:03

NSTask启动一个命令,该命令将一组参数作为字符串数组。NSTask不做任何外壳解析的魔术,您也不能将字符串作为参数传递给sh并让它以这种方式解析它。可能有一种方法可以做到这一点,但也有更好的解决方案。

只需通过NSTask运行ioreg命令,通过标准方法获取输出,然后对返回的字符串执行简单的枚举以查找所需的行。虽然多了几行代码,但与尝试通过shell注入相比,它的脆弱性要小得多(如果您曾经提供过某种类型的参数,安全漏洞也会少得多)。这很容易做到。

有关详细信息,请参阅this document

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4628047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档