Je voudrais exécuter un script shell, à partir d'un fichier ou d'une chaîne objective-c (dans le code). J'aimerais aussi que le résultat du script shell soit stocké dans une variable. Je ne voudrais pas que le script shell soit divisé en arguments (comme setLaunchPath quand je l'exécute). Par exemple: en exécutant ce script shell "mount_webdav idisk.mac.com/mac_username/Volumes/mac_username" au lieu de "/ bin/mount_webdav" alors les arguments. Est-ce qu'il y a un moyen de faire ça? J'utilise NSTask en ce moment, mais cela m'a causé quelques erreurs quand j'essaye de mettre les arguments avec. Voici le code posé:Obtenir le résultat du script shell objectif-c
(une partie du fichier .m)
NSString *doshellscript(NSString *cmd_launch_path, NSString *first_cmd_pt) {
NSTask *task = [[NSTask alloc] init]; // Make a new task
[task setLaunchPath: cmd_launch_path]; // Tell which command we are running
[task setArguments: [NSArray arrayWithObjects: first_cmd_pt, nil]];
[task setArguments: first_cmd_pt];
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task launch];
NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
[task release]; //Release the task into the world, thus destroying it.
return string;
}
NSString *mount_idisk(NSString *mac_username) {
doshellscript(@"/bin/mkdir", [@"/Volumes/" stringByAppendingString:mac_username]);
NSString *path_tmp = [mac_username stringByAppendingString: @"/ /Volumes/"];
NSString *idisk_path = [path_tmp stringByAppendingString:mac_username];
//NSLog(@"%@", [@" http://idisk.mac.com/" stringByAppendingString: idisk_path]);
NSString *finished_path = [@"http://idisk.mac.com/" stringByAppendingString: idisk_path];
doshellscript(@"/sbin/mount_webdav", finished_path);
}
... Voici la ligne que je me sers pour l'exécuter: mount_idisk("username");
@ bbum: Voulez-vous dire que vous ne pouvez exécuter une commande à l'époque avec NSTask? – eonist
@GitSyncApp Correct. NSTask permet l'exécution externe d'une seule commande. Créez plusieurs instances, une pour chaque commande. Si vous devez effectuer une sorte de piping entre les processus, écrivez un script shell dans un fichier temporaire et exécutez-le. – bbum
@ bbum: Qu'en est-il de l'appel d'un shellscript qui à son tour appelle plusieurs commandes? – eonist