例如,我有这个简单的 bash 脚本:
#!/bin/sh
cd $1;
还有这个 cocoa wrapper :
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: 第 9 行: cd:/Users/test/Desktop/test: 没有这样的文件或目录
不带空格的路径(例如: @"/Users/test/Desktop/test1"
)也可以。
最佳答案
对于NSTask
来说,这并不是真正的问题。打开终端(如果使用 tcsh
,则运行 bash
),然后执行
$ mkdir foo\ bar
$ FUBAR=foo\ bar
$ cd $FUBAR
这行不通。你需要做
$ cd "$FUBAR"
相反。这是因为sh
的扩展规则。阅读 bash 的手册,例如here ,名为EXPANSION的部分。 This section shell 脚本入门也可能有所帮助。
关于objective-c - NSTask 与 bash 脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663716/