如何在pbcopy中使用NSTask?

时间:2011-05-16 19:10:45

标签: objective-c macos shell foundation pbcopy

我是初学者,我遇到了问题。我想使用NSTask命令“pbcopy”。我试过这个,但似乎它不起作用:

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

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"my-text-to-copy", @"| pbcopy", nil];
[task setArguments: arguments];

[task launch];

有什么想法吗?感谢。


工作正常:

NSTask *task = [[NSTask alloc] init];

NSPipe *pipe;
pipe = [NSPipe pipe];

task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/echo"];
[task setStandardOutput:pipe]; // write to pipe
[task setArguments: [NSArray arrayWithObjects: @"tmp", nil]];
[task launch];
[task waitUntilExit];

task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/pbcopy"];
[task setStandardInput:pipe]; // read from pipe
[task launch];
[task waitUntilExit];

1 个答案:

答案 0 :(得分:2)

管道(“|”)是shell的一个特性,而不是您正在使用的命令的参数。您必须使用两个NSTasks,一个用于回声,一个用于pbcopy,并在它们之间设置NSPipe

顺便说一下,我假设你只是以此为例。否则,使用NSPasteboard会更简单。