objective-c - NSTask 与 bash 脚本问题

标签 objective-c cocoa bash shell nstask

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

相关文章:

ios - 带自动布局的 tableHeaderView 无法正常工作

ios - 2.23 : Apps must follow the iOS Data Storage Guidelines or they will be rejected

c++ - Cocoa 选择器的行为可以用 C++ 重新实现吗?

bash - 用于动态添加文件的 shell 脚本的配置文件 -ubuntu

objective-c - 在 Objective-C 中处理大数字?

ios - 将 uiimage 保存到 ios 扩展中的照片库

objective-c - 工作表呈现后禁用关闭按钮

objective-c - 创建在 Mac 应用程序中使用的快捷方式选择字段的好方法是什么?

bash - 代码不适用于 sh -c,但直接适用于 sh

java - 使用bash编译java时出现Invalid flag错误