Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Einen Terminal-Befehl aus XCode/Objective-C heraus aufrufen?

Einen Terminal-Befehl aus XCode/Objective-C heraus aufrufen?

Z02.08.0602:12
Ich habe einen längeren Terminal - Befehl den ich gerne aus einer Anwendung heraus aufrufen möchte. Gibt es einen Befehl um externen Code (also eine Zeile Terminal-Code) aufzurufen?
0

Kommentare

Sebastian
Sebastian02.08.0604:46
Wie seaside schreibt: NSTask.
Guter Samplecode von Apple ist hier:
0
Z02.08.0614:29
ich danke Euch!:-X
0
Z02.08.0623:08
ich bräuchte doch noch etwas Hilfe, hier wäre jetzt der Code-Ausschnitt


- (IBAction)z1Action:(id)sender
{
NSTask *theTask = [ [ NSTask alloc ] init ];
[ theTask setLaunchPath:@"defaults write com.apple.mail UserHeaders '{\"Bcc\"=\"gesendet@meineeigenedomain.de\";}' " ];

}



Eigentlich lautet der Terminal - Befehl:

defaults write com.apple.mail UserHeaders '{"Bcc"="gesendet@meineeigenedomain.de";}'

Damit XCode nicht denkt, die Terminal-Codezeile wäre zu Ende, habe ich jeweils ein Slash vor die Anführungsstriche gesetzt, aber so richtig funktioniert es noch nicht.

Nehme ich normale kleine Unix - Befehle wie ls funktioniert das schon prima. Nur diese etwas längere Terminal-Zeile bekomme ich noch nicht zum Laufen. Ich vermute mal wegen diesen Anführungsstrichen.
0
Sebastian
Sebastian03.08.0600:00
Escapst Du die Anführungszeichen?

Dann fällt mir auf:
1. Launchpath ist der komplette Pfad
2. "defaults" ist der Befehl. Das dahinter sind die Argumente, die sollten extra übergeben werden.
0
Z03.08.0610:02
Ich muss ganz ehrlich sagen, dass ich erst vor paar Tagen mit Objective-C angefangen hab, bin erst im Hillegas im 3ten Kapitel.

Wollte aber direkt das gelesen bereits an etwas eigenem umsetzen.

zu 1)
Den Befehl habe ich, bzw. denke ich, dass ich es habe:
Oben hab ich ja den kompletten Befehl wie ich ihn jetzt in XCode habe reinkopiert, ich habe vor jedes " ein BackSlash \ gesetzt, wie ich es von anderen Sprachen her kenne. Oder ist der BackSlash das falsche Zeichen zum Escapen?

zu 2) das hatte ich auch bereits versucht, das werde ich nochmal testen.


Ich vermute eher, dass mein BackSlash nicht das korrekte Zeichen zum escapen ist.
0
Z03.08.0610:03
EDIT:

Der Satz
"Den Befehl habe ich, bzw. denke ich, dass ich es habe: "
sollte natürlich lauten:

Den Befehl habe ich escaped, bzw. denke ich, dass ich ihn escaped habe:
0
dtlmtn03.08.0610:35
NSTask funktioniert so:

NSTask *task = [[NSTask alloc] init];
// set complete launch path
[task setLaunchPath:@"/usr/bin/defaults"];
// set arguments
[task setArguments:[NSArray arrayWithObjects:@"write", @"com.apple.mail", @"UserHeaders", @"{\"Bcc\"=\"gesendet@meineeigenedomain.de\";}", nil]];
// run task, wait for exit, get exit code
[task launch];
[task waitUntilExit];
int status = [task terminationStatus];
// release task and display error if any
[task release];
if(status != 0) NSLog(@"Error");

Falls Du keine Ausgaben benötigst (stdout oder stderr), reicht das.
0
Z03.08.0621:46
dtlmtn
NSTask funktioniert so:


dtlmtn, ich kann mich nur vor die verneigen. Es funktioniert prima auf Anhieb. Wow!

Getrennt nach LaunchtPath und Arguments hatte ich zwar auch schon mal, aber alles in einer Zeile. Auf die zusätzlichen @ wäre ich jetzt nicht gekommen. Danke!

Ich zähle Euch alle 3 zu den ganzen grossen hier im Forum! DANKE!
0
seaside02.08.0603:16
1. Schritt lade Dir CoCoa Browser runter http://homepage2.nifty.com/hoshi-takanori/cocoa-browser/

NSTask is your friend.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.