سؤال

لا أعرف لماذا ترجع هذه الطريقة سلسلة فارغة:

- (NSString *)installedGitLocation {
    NSString *launchPath = @"/usr/bin/which";

    // Set up the task
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:launchPath];
    NSArray *args = [NSArray arrayWithObject:@"git"];
    [task setArguments:args];

    // Set the output pipe.
    NSPipe *outPipe = [[NSPipe alloc] init];
    [task setStandardOutput:outPipe];

    [task launch];

    NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
    NSString *path = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    return path;
}

إذا بدلا من المرور @"git" كما الحجة، أنا تمر @"which" انا حصلت /usr/bin/which عاد كما هو متوقع. لذلك على الأقل يعمل مبدأ.

من المحطة

$ which which
$ /usr/bin/which
$
$ which git
$ /usr/local/git/bin/git

لذلك يعمل هناك.

الشيء الوحيد الذي يمكنني التفكير فيه هو ذلك which لا تفتيش من خلال جميع المسارات في بيئتي.

هذا يقودني للجنون! هل لدى أي شخص أي أفكار؟

تعديل: يبدو أن هذا يدور حول إعداد إما NSTASK أو قذيفة المستخدم (على سبيل المثال، ~ / .bashrc) بحيث يتم رؤية البيئة الصحيحة (مسار $) بواسطة nstask.

هل كانت مفيدة؟

المحلول

تشغيل مهمة عبر استخدامات NSTASK fork() و exec() لإدارة المهمة فعلا. قذيفة المستخدم التفاعلية لا تشارك على الإطلاق. حيث $PATH هو (حسب وكبير) مفهوم Shell، لا ينطبق عندما تتحدث عن عمليات التشغيل في بعض الأزياء الأخرى.

نصائح أخرى

يحاول،

 مهمة setlaunchpath: @ "/ بن / باش"]؛ nsarray * args = [nsarray arriaywithobjects: @ "- l"، @ "- c"، @ "الذي git"، لا شيء]؛ [SetArgums المهام: Args]؛

هذا عملت بالنسبة لي على الثلج ليوبارد؛ لم أختبر على أي نظام آخر. the -l (LottleCase L) يخبر باش إلى "التصرف كما لو كان قد تم استدعاء كقافة تسجيل الدخول"، وفي العملية التي التقطت مسار $ العادي. هذا لم يعمل بالنسبة لي إذا تم تعيين مسار الإطلاق على / بت / بت، حتى مع -l.

/ USR / محلي / جيت / بن في مسار $ الخاص بك عند تشغيل البرنامج؟ أظن which يبدو فقط في مسار المستخدم الخاص بالمستخدم.

إلقاء نظرة على السؤال تعرف على موقع ملف قابل للتنفيذ في الكاكاو. وبعد يبدو أن المشكلة الأساسية هي نفسها. الإجابة لسوء الحظ ليست لطيفة وأنيقة، ولكن هناك بعض المعلومات المفيدة هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top