Если с разрешениями все в порядке, то, похоже, вы не получаете надлежащую среду оболочки. Для многих простых команд, таких как mkdir, есть эквиваленты Какао, но если вы предпочитаете командную строку, я бы предложил использовать объектную модель NSTask, с которой мне очень повезло. Вот моя собственная адаптация довольно распространенной модели, которую вы можете попробовать.
-(NSString *) runThisCmd:(NSString *) runString withArgs:(NSArray *)runArgs {
//this method of calling NSTask is designed for small quick commands that return
//a small amount of data to the command line
NSTask *task = [NSTask new];
[task setLaunchPath:runString];
[task setArguments:runArgs];
[task setStandardOutput:[NSPipe pipe]];
[task setStandardInput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]];
[task launch];
NSData *stdOuput = [[[task standardOutput] fileHandleForReading] readDataToEndOfFile];
[task waitUntilExit];
if ([task terminationStatus] == 0) {
//scriptSuccess = YES;
}
else {
//scriptSuccess = NO;
}
NSString *outputString = [[NSString alloc] initWithData:stdOuput encoding:NSUTF8StringEncoding];
return outputString;
}
Назовите это так:
NSString *runCmd = [[NSString alloc] initWithString:@"/bin/bash"];
NSArray *runArgs = [[NSArray alloc] initWithObjects:@"-c",@"mkdir",@"/tmp/newdir",nil];
//update proper label
NSString *output;
output = [self runThisCmd:runCmd withArgs:runArgs];
Примечание: вы можете адаптировать этот подход, чтобы он действовал так же, как команда system (), если вы используете логику [завершение задачи] и отбрасываете возвращаемые строки. Даже если вам это не нужно, вывод может помочь при устранении ошибок.