NSTask с проблемой bash-скрипта - PullRequest
       26

NSTask с проблемой bash-скрипта

1 голос
/ 08 сентября 2010

Например, у меня есть простой скрипт bash:

#!/bin/sh
cd $1;

А вот эта какао-обёртка для неё:

NSTask *cd = [[NSTask alloc] init];

NSString *testFolder = [NSString stringWithString:@"/Users/test/Desktop/test 1"];

[cd setLaunchPath:@"/bin/sh"];

[cd setArguments:[NSArray arrayWithObjects:[[NSBundle mainBundle]
                                              pathForResource:@"cd" ofType:@"sh"],testFolder, nil]];
[cd launch];
[cd release];

Это не работает правильно. И проблема в том, что место в имени папки в testFolder. Я пытаюсь установить testFolder так:

NSString *testFolder = [NSString stringWithString:@"/Users/test/Desktop/test\\ 1"]

Но это также выводит ту же ошибку:

cd.sh: line 9: cd: /Users/test/Desktop/test: No such file or directory

Пути без пробелов (например: @"/Users/test/Desktop/test1") также работают.

1 Ответ

2 голосов
/ 08 сентября 2010

На самом деле проблема не в NSTask. Откройте свой терминал (и запустите bash, если вы используете tcsh), и выполните

$ mkdir foo\ bar
$ FUBAR=foo\ bar
$ cd $FUBAR

Это не работает. Вам нужно сделать

$ cd "$FUBAR"

вместо этого. Это из-за правила расширения sh. Прочитайте руководство bash, например. здесь , раздел под названием РАСШИРЕНИЕ . Этот раздел из учебника по сценариям оболочки также может помочь.

...