Запуск файла SH с помощью NSTask - PullRequest
0 голосов
/ 28 сентября 2010

Вот мой код:

-(void)startTask{
NSString * cmd = @"/bin/sh";
pty_ = [[PseudoTTY alloc] init];

NSTask * task = [[NSTask alloc] init];
[task setStandardInput:[pty_ slaveFileHandle]];
[task setStandardOutput:[pty_ slaveFileHandle]];
[task setStandardError:[pty_ slaveFileHandle]];

[task setCurrentDirectoryPath:[@"~" stringByExpandingTildeInPath]];
[task setLaunchPath:@"/bin/sh /applications/jarvis/brain/server.sh"];

[[NSNotificationCenter defaultCenter]
            addObserver:self
               selector:@selector(didRead:)
                   name:NSFileHandleReadCompletionNotification
                 object:[pty_ masterFileHandle]];

[[pty_ masterFileHandle] readInBackgroundAndNotify];

[task launch];

[self insertText:
    [NSString stringWithFormat:@"Started %@ on terminal %@", cmd, [pty_ name]]];

}

Но вместо этого мне нужно запустить файл SH: /applications/brain/server.sh

Я в замешательстве ....

Может ли кто-нибудь помочь мне с моим кодом?

спасибо, Илия

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Попробуйте:

// make sure server.sh begins with #!/bin/sh
NSString * cmd = @"/applications/brain/server.sh";  
// ...
[task setLaunchPath:cmd];

(исходный код от: http://amath.colorado.edu/pub/mac/programs/PseudoTTY.zip)

0 голосов
/ 28 сентября 2010
[task setCurrentDirectoryPath:[@"~" stringByExpandingTildeInPath]];

Вы можете просто позвонить NSHomeDirectory, чтобы получить путь к домашней директории.

[task setLaunchPath:@"/bin/sh /applications/jarvis/brain/server.sh"];

Этот файл не существует.В каталоге / bin нет каталога с именем «sh»;как таковой, в нем нет подкаталога «apps», в этом подкаталоге «jarvis», в этом подкаталоге «brain» и в этом файле «server.sh».не оболочка.Трюки с оболочкой не работают;он не анализирует аргументы, не интерполирует переменные окружения или ~ (обратите внимание, что вы должны были сделать это явно), или все остальное, что делает оболочка.Вы можете использовать оболочку только так же, как и любую другую программу.

Вам необходимо указать путь запуска для пути к оболочке и передать путь к сценарию оболочки в качестве первого аргумента.Кроме того, если вы знаете, что файл сценария оболочки является исполняемым (и содержит правильный shebang ), вы можете передать путь к файлу сценария в качестве пути запуска и пропустить аргументы.

...