【发布时间】:2013-03-28 17:37:30
【问题描述】:
我正在尝试为 iPhone(或 iPad,就此而言)构建一个应用程序,我想在其中运行一些 shell 命令。我希望它工作的 iPhone 没有越狱。
system() 命令似乎在执行 shell 命令时起作用,但是输出和输入当然仍然是个问题。我了解到NSTask 可用于此类事情并且它存在,尽管没有记录。 (包括 Mac NSTask.h 似乎可以完美运行)
现在的问题是在执行这段代码时:
NSTask *task;
task=[[NSTask alloc] init];
task.launchPath=@"/usr/bin/ls";
task.arguments=[NSArray array];
NSPipe *pipe=[NSPipe pipe];
task.standardOutput=pipe;
task.standardError=pipe;
NSFileHandle *output=pipe.fileHandleForReading;
pipe=[NSPipe pipe];
task.standardInput=pipe;
[task launch];
其中pipe 用于将来的 I/O,它会生成错误读数:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
我已经为 unix bin 目录尝试了很多可能的路径,但要么我找不到它,要么我的应用程序没有列出文件的权限。 -.-
如何在 iPhone 上执行 shell 命令,同时控制该命令的输入和输出?
【问题讨论】:
-
如果它没有越狱,那么它就不会工作。此外,这可能是列出目录内容的最糟糕的方式。见stackoverflow.com/questions/499673/…
-
ls只是一个例子,它可以是任何其他命令。但是为什么只有越狱呢?为什么我不能只执行一个 shell 命令? -
因为在 iOS 中是不允许的。任何涉及直接创建另一个进程的操作都将被安全策略拒绝。
-
嗯...那失败了,我猜 :) 将其发布为答案,如果没有其他人能够提供帮助,我会接受。