I am trying to use pipes to process a command that requires multiple inputs, but am not quite sure how to do this. Here is a snippet of what I'm trying to do. I know how to handle the first input, but I'm lost, like on a pipe in the second input-newstdinpass
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath: @"/bin/sh"];
[task setArguments: [NSArray arrayWithObjects: @"-c", @"/usr/bin/hdiutil chpass -oldstdinpass -newstdinpass /path/to/dmg", nil]];
[task setStandardInput:pipe];
[task launch];
[[pipe fileHandleForWriting] writeData:[@"thepassword" dataUsingEncoding:NSUTF8StringEncoding]];
[[pipe fileHandleForWriting] closeFile];
[task waitUntilExit];
[task release];
So, I know that using it hdiutilthis way is a bit of a hack, but in terms of pipes, am I doing it right?
Thank.
UPDATE . In case others are wondering about this, a quick fix to my problem is to pass a zero-terminated string as pointed out by Ken Thomases. Use [[NSString stringWithFormat:@"oldpass\0newpass\0"] dataUsingEncoding:NSUTF8StringEncoding]in a pipe. Now you still need to learn how to fasten several NSTasksusing pipes ...