通常在终端我会执行此命令与串行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];
}}
我知道代码本质上是有效的,因为我用相同的脚本执行了其他终端命令.....不知道为什么我不能让回声发射....也许我错过了什么简单?
感谢您的帮助
答案 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在终端中可以方便地进行交互式调试,但在你的应用程序中启动一个外部任务,只是为文件写三个字节,这是非常严重的过度杀伤......: - )