// Task anlegen
NSTask *theTask = [[[NSTask alloc] init] autorelease];
[theTask setLaunchPath: @"/usr/bin/find"];
// Parameter festlegen
[theTask setArguments:theTaskArguments];
// Pipe anlegen
NSPipe *thePipe = [NSPipe pipe];
[theTask setStandardOutput:thePipe];
// Error Pipe
NSPipe *theErrorPipe = [NSPipe pipe];
[theTask setStandardError:theErrorPipe];
// Handle zum Lesen erzeugen
NSFileHandle *theFileHandle = [thePipe fileHandleForReading];
// Task starten
[theTask launch];
// Ausgabe lesen
NSData *theReadData = [theFileHandle readDataToEndOfFile];
So, wie jeden anderen String auch … auch nach 100 Mal fragst Du Dich immer noch durch.Wie kann ich das Ergebnis jetzt in ein Text-Feld hineinschreiben?
NSData > NSString > NSTextField -setStringValue
-setStringValue, da steckr schon im Namen das Wort String. Du willst dem aber Data geben?
Ich habe Dir geschrieben welchen Weg Du gehen sollst/kannst:
NSData > NSString > NSTextField -setStringValue
Juhu, sogar ohne Leak Sehr schön.
Apropo Feinheiten. stringWithUTF8String: erwartet einen NULL terminierten String.
Wobei ich zu
NSString *thestring = [NSString stringWithUTF8TString:[theReadData bytes]];
tendieren würde. Das macht dem String etwas weniger Arbeit uns ist auch kürzer. Aber wenn wir schon bei diesen Feinheiten angelangt sind …
readDataToEndOfFile liest bis zu einem end-of-file Indikator (ist der \0 oder vielleicht doch 0x04 (EOF bzw. EOT)?). Nach meinen Erfahrungen mit NSTask/NSFileHandle, landet dieser Indikator jedenfalls nicht im NSData Objekt. Das letzte Byte im NSData Objekt ist daher nicht sicher \0.Stimmt, wird der denn nicht automatisch über die Pipe gesendet?
Tut er das wirklich/immer?Der Absender übergibt ja schließlich seinerzeit eine \0
Es funktioniert jetzt schön und gut, doch ich wollte jetzt folgendes Kommando ausführen und bin daran gescheitert:
echo 'Hallo' | sed "s/H$//"
Das kann ich nicht so machen, weil ich die Argumente ja danach gesetzt werden. Wie kann ich diesen Befehl trotzdem ausführen?
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Für die Ihnen angezeigten Verarbeitungszwecke können Cookies, Geräte-Kennungen oder andere Informationen auf Ihrem Gerät gespeichert oder abgerufen werden.
Anzeigen und Inhalte können basierend auf einem Profil personalisiert werden. Es können mehr Daten hinzugefügt werden, um Anzeigen und Inhalte besser zu personalisieren. Die Performance von Anzeigen und Inhalten kann gemessen werden. Erkenntnisse über Zielgruppen, die die Anzeigen und Inhalte betrachtet haben, können abgeleitet werden. Daten können verwendet werden, um Benutzerfreundlichkeit, Systeme und Software aufzubauen oder zu verbessern.
Durch das Klicken des Buttons "Zustimmen" willigen Sie gem. Art. 49 Abs. 1 DSGVO ein, dass auch Anbieter in den USA Ihre Daten verarbeiten. In diesem Fall ist es möglich, dass die übermittelten Daten durch lokale Behörden verarbeitet werden.