Hallo Zusammen,
ich habe ein kleines Ruby Script geschrieben, dass ein kleines Problem perfekt löst, wenn ich es vom Apple Terminal aus starte. Ich habe versucht das Rubyscript mit NSTask zu starten ("/usr/bin/ruby"). Leider ist es wohl so, dass rvm einige Dinge in der Apple_Terminal Umgebung verdreht (NSTask setEnvironment reicht leider nicht).
Selbst im Terminal verhält sich Ruby verdächtig. Mit "whereis ruby" erhalte ich "/usr/bin/ruby", aber es macht einen Unterschied, ob ich "ruby" oder "/usr/bin/ruby" im Terminal aufrufe.
Gibt es eine Möglichkeit NSTask so zu starten, dass es sich wie im Terminal verhält?
Oder mache ich grundsätzlich etwas falsch (Celler und Prozedur unten)?
Alles anzeigen
ich habe ein kleines Ruby Script geschrieben, dass ein kleines Problem perfekt löst, wenn ich es vom Apple Terminal aus starte. Ich habe versucht das Rubyscript mit NSTask zu starten ("/usr/bin/ruby"). Leider ist es wohl so, dass rvm einige Dinge in der Apple_Terminal Umgebung verdreht (NSTask setEnvironment reicht leider nicht).
Selbst im Terminal verhält sich Ruby verdächtig. Mit "whereis ruby" erhalte ich "/usr/bin/ruby", aber es macht einen Unterschied, ob ich "ruby" oder "/usr/bin/ruby" im Terminal aufrufe.
Gibt es eine Möglichkeit NSTask so zu starten, dass es sich wie im Terminal verhält?
Oder mache ich grundsätzlich etwas falsch (Celler und Prozedur unten)?
Quellcode
- + (NSString *)launchCommand:(NSString *)aCommand inDirectory:(NSString*)aDirectory withArguments:(NSArray *)arguments andEnvironment:(NSDictionary*)envDictionary{
- if (arguments == nil) arguments = @[];
- [[NSProcessInfo processInfo] processIdentifier];
- NSPipe *pipe = [NSPipe pipe];
- NSFileHandle *file = pipe.fileHandleForReading;
- NSTask *task = [[NSTask alloc] init];
- task.launchPath = aCommand;
- task.arguments = arguments;
- if (aDirectory)
- task.currentDirectoryPath = aDirectory;
- task.standardOutput = pipe;
- if (envDictionary)
- task.environment = envDictionary;
- [task launch];
- NSData *data = [file readDataToEndOfFile];
- [file closeFile];
- return [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
- }