NSTask 与 bash 脚本问题

发布于 2024-09-17 22:59:17 字数 825 浏览 13 评论 0原文

例如,我有这个简单的 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" )也可以。

For example, i have this simple bash script:

#!/bin/sh
cd $1;

And this cocoa wrapper for it:

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

This is doesn't work correct. And the problem is space in folder name in testFolder.
I'm trying to set testFolder like this:

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

But this is also output same error:

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

Paths without spaces (for example: @"/Users/test/Desktop/test1" ) works as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寒江雪… 2024-09-24 22:59:17

对于 NSTask来说,这并不是真正的问题。打开你的终端(如果你使用tcsh,则运行bash),然后执行

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

此操作。你需要做的

$ cd "$FUBAR"

是。这是因为sh的扩展规则。阅读 bash 手册,例如这里< /a>,名为EXPANSION的部分。 来自 shell 脚本入门的这一部分也可能有帮助。

That's not really a problem about NSTask. Open your terminal (and run bash if you use tcsh), and do

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

This doesn't work. You need to do

$ cd "$FUBAR"

instead. This is because of the expansion rule of the sh. Read the manual of bash e.g. here, the section called EXPANSION. This section from the shell scripting primer might help, too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文