我想使用管道來處理需要多個輸入的命令,但不太清楚如何去做。這是我想要做的一個片段。我知道如何處理第一個輸入,但我在第二輸入-newstdinpass
NSTask與多個管道輸入
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];
所以我知道以這種方式使用hdiutil
失去了作爲管道是一個黑客位,但在管道方面,我正在以正確的方式開展工作嗎?
謝謝。
UPDATE如果別人想知道這件事,我的問題的一個快速解決方案是傳遞一個以null結尾的字符串,正如Ken Thomases指出的那樣。使用[[NSString stringWithFormat:@"oldpass\0newpass\0"] dataUsingEncoding:NSUTF8StringEncoding]
進入管道。現在,還需要學習如何彌合多個NSTasks
與管...
感謝您的代碼。對於如何將同一個命令的多個任務組合在一起,我仍然有點困惑,但是我會對它採取一些措施。 – Daniel 2012-04-19 05:58:11
使用一個管道作爲一個任務的標準輸出和下一個任務的標準輸入。然後另一個管道將第二個任務的輸出連接到第三個任務的輸入。等等。如果你想爲整個鏈提供輸入,建立一個管道並將其設置爲第一個任務的輸入,並按照你的要求寫入。如果你想從整個鏈中輸出,建立一個管道並將其設置爲鏈中最後一個任務的標準輸出並從中讀取。 – 2012-04-20 08:58:46
你已經保存了一天 – 2017-12-15 01:47:19