Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to run NSTask with multiple commands
    primarykey
    data
    text
    <p>I'm trying to make a NSTask running a command like this:</p> <blockquote> <p>ps -clx | grep 'Finder' | awk '{print $2}'</p> </blockquote> <p>Here is my method</p> <pre><code>- (void) processByName:(NSString*)name { NSTask *task1 = [[NSTask alloc] init]; NSPipe *pipe1 = [NSPipe pipe]; [task1 waitUntilExit]; [task1 setLaunchPath: @"/bin/ps"]; [task1 setArguments: [NSArray arrayWithObjects: @"-clx", nil]]; [task1 setStandardOutput: pipe1]; NSTask *task2 = [[NSTask alloc] init]; NSPipe *pipe2 = [NSPipe pipe]; [task2 setLaunchPath: @"/usr/bin/grep"]; [task2 setArguments: [NSArray arrayWithObjects: @"'Finder'", nil]]; [task2 setStandardInput:pipe1]; [task2 setStandardOutput: pipe2]; NSTask *task3 = [[NSTask alloc] init]; NSPipe *pipe3 = [NSPipe pipe]; [task3 setLaunchPath: @"/usr/bin/grep"]; [task3 setArguments: [NSArray arrayWithObjects: @"'{print $2}'", nil]]; [task3 setStandardInput:pipe2]; [task3 setStandardOutput: pipe3]; NSFileHandle *file = [pipe3 fileHandleForReading]; [task1 launch]; [task2 launch]; [task3 launch]; NSData *data; data = [file readDataToEndOfFile]; NSString *string; string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; NSLog(@"Result: %@", string); } </code></pre> <p>But the result is just</p> <blockquote> <p>Result: </p> </blockquote> <p>What am I doing wrong?</p> <p><strong>EDIT</strong></p> <pre><code>- (void) processByName:(NSString*)name { NSTask *task1 = [[NSTask alloc] init]; NSPipe *pipe1 = [NSPipe pipe]; [task1 waitUntilExit]; [task1 setLaunchPath: @"/bin/ps"]; [task1 setArguments: [NSArray arrayWithObjects: @"-clx", nil]]; [task1 setStandardOutput: pipe1]; NSTask *task2 = [[NSTask alloc] init]; NSPipe *pipe2 = [NSPipe pipe]; [task2 setLaunchPath: @"/usr/bin/grep"]; [task2 setArguments: [NSArray arrayWithObjects: @"'Finder'", nil]]; [task2 setStandardInput:pipe1]; [task2 setStandardOutput: pipe2]; NSTask *task3 = [[NSTask alloc] init]; NSPipe *pipe3 = [NSPipe pipe]; [task3 setLaunchPath: @"/usr/bin/grep"]; [task3 setArguments: [NSArray arrayWithObjects: @"'{print $2}'", nil]]; [task3 setStandardInput:pipe2]; [task3 setStandardOutput: pipe3]; NSFileHandle *file = [pipe3 fileHandleForReading]; [task1 launch]; [task2 launch]; [task3 launch]; [[NSNotificationCenter defaultCenter] addObserverForName:NSTaskDidTerminateNotification object:task3 queue:nil usingBlock:^(NSNotification* notification){ NSData * data = [file readDataToEndOfFile]; NSString * string; string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; NSLog(@"Result: %@", string); }]; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload