NSTask与bash脚本问题

时间:2010-09-08 00:27:27

标签: objective-c cocoa bash shell nstask

例如,我有这个简单的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 个答案:

答案 0 :(得分:2)

NSTask这不是一个真正的问题。打开您的终端(如果您使用bash,则运行tcsh),然后执行

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

这不起作用。你需要做

$ cd "$FUBAR"

代替。这是因为sh的扩展规则。阅读bash的手册,例如here,名为 EXPANSION 的部分。来自shell脚本编写入门的This section也可能会有所帮助。