Я пытаюсь запустить perl regex один лайнер на кучу файлов в каталоге (через рекурсивную находку) и немного беспокоясь о том, что NSTask делает то, что одна строка в командной строке.NSTask вызов perl и piping в поиске не работает
Perl один вкладыш в терминале работает, а упрощенная NSTask, выполняющая команду в виде строки через оболочку, тоже работает.
команды Perl (работы)
perl -p -i -e 's/DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";/DEBUG_INFORMATION_FORMAT = \"dwarf\";/g' `find . -name *.pbxproj`
Простые NSTask (работы)
Использование Inket's answer from another question:
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
Я пишу плагин для переключения различных настроек Xcode проекта (изменение параметров может привести к 60% -ное улучшение по времени сборки). В противном случае я просто проверил бы скрипт в репо проекта. – nflacco