NsTask执行终端命令的问题

时间:2011-05-16 05:18:20

标签: objective-c cocoa terminal command echo

通常在终端我会执行此命令与串行USB设备通信。

echo -e'\ xFF \ x01 \ x01'> /dev/cu.usbserial-A8003YzT

我正在尝试使用NStask在可可应用程序中执行此操作,但由于某种原因我没有爱。

继承我的代码:

- (IBAction) doCommand:(id)sender{
{
    NSTask *task;
    task = [[NSTask alloc] init];

    [task setLaunchPath:@"/bin/echo"];

    [task setArguments:
[NSArray arrayWithObjects:@"-e '\\xFF\\x01\\x01' > /dev/cu.usbserial-A8003YzT", nil]];


    [task launch];

    [task release];
}}

我知道代码本质上是有效的,因为我用相同的脚本执行了其他终端命令.....不知道为什么我不能让回声发射....也许我错过了什么简单?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您尝试将'\xFF\x01\x01' > /dev/cu.usbserial-A8003YzT作为echo的第一个参数发送,但这不是从shell提示符运行该命令时发生的情况。只有第一个引用的部分作为参数发送给echo。 Bash解释>本身,捕获echo命令的输出,并将其重定向到指定的文件 - 在这种情况下,是一个代表USB设备的文件。

如果您想运行一个NSTask来解释带有重定向,管道等的shell命令,您需要使用/bin/sh作为启动路径,{{1 },-c作为参数。

或者,您可以完全跳过your shell command,只需打开NSTask到设备文件,然后发送要发送它的三字节序列。 Echo在终端中可以方便地进行交互式调试,但在你的应用程序中启动一个外部任务,只是为文件写三个字节,这是非常严重的过度杀伤......: - )