2010-09-08 6 views
1

Par exemple, j'ai ce simple script bash:NSTask avec le problème de script bash

#!/bin/sh 
cd $1; 

Et cette enveloppe de cacao pour elle:

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]; 

C'est ne fonctionne pas correctement. Et le problème est l'espace dans le nom du dossier dans testFolder. J'essaie de mettre testFolder comme ceci:

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

Mais ceci est aussi la sortie même erreur:

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

chemins sans espaces (par exemple: @"/Users/test/Desktop/test1") fonctionne aussi bien.

+0

J'ai cherché pourquoi je recevais "chemin de lancement non accessible" et votre inclusion de votre code m'a fait réaliser que j'avais besoin de [cd setLaunchPath: @ "/ bin/sh"]; Ce n'est pas votre question, mais c'était toujours utile – stifin

Répondre

2

Ce n'est pas vraiment un problème à propos de NSTask. Ouvrez votre terminal (et exécutez bash si vous utilisez tcsh), et faire

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

Cela ne fonctionne pas. Vous devez faire

$ cd "$FUBAR" 

à la place. Cela est dû à la règle d'expansion de sh. Lisez le manuel de bash par ex. here, la section intitulée EXPANSION. This section à partir de l'amorce script de shell peut aider aussi.