Я пытаюсь запустить perl regex one liner для группы файлов в каталоге (через рекурсивный поиск), и у меня возникли проблемы с тем, чтобы заставить NSTask делать то, что делает одна строка в командной строке.
Perl one liner в терминале работает, и упрощенный NSTask, запускающий команду в виде строки через оболочку, тоже работает.
Команда Perl (работает)
perl -p -i -e 's/DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";/DEBUG_INFORMATION_FORMAT = \"dwarf\";/g' `find . -name *.pbxproj`
Простой NSTask (работает)
Используя ответ Inket на другой вопрос:
NSString *command = @"perl -p -i -e 's/DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";/DEBUG_INFORMATION_FORMAT = \"dwarf\";/g' `find /Users/nflacco/Projects/XXX/XXX.xcodeproj -name *.pbxproj`";
NSTask* task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];
[task setArguments:@[@"-c", command]];
[task launch];
Приложение терминала Xcode (не работает)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *workspacePath = @"/Users/nflacco/Projects/XXX/XXX.xcodeproj";
NSString *old = @"DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";";
NSString *new = @"DEBUG_INFORMATION_FORMAT = \"dwarf\";";
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/perl"];
NSString *regex = [NSString stringWithFormat:@"'s/%@/%@/g'", old, new];
NSString *pathArg = [NSString stringWithFormat:@"`find %@ -name *.pbxproj`", workspacePath];
[task setArguments:@[ @"-p", @"-i", @"-e", regex, pathArg]];
[task launch];
}
return 0;
}
Консоль Xcode:
Can't open `find /Users/nflacco/Projects/XXX/XXX.xcodeproj -name *.pbxproj`: No such file or directory.
Program ended with exit code: 0