2010-09-08 176 views
1

例如,我有這個簡單的bash腳本: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")的作品也是如此。

+0

我一直在尋找爲什麼我得到「啓動路徑無法訪問」,並且您的代碼包含在內,這讓我意識到我需要[cd setLaunchPath:@「/ bin/sh」];這不是你的問題,但它仍然有幫助 – stifin 2011-07-08 02:09:05

回答

2

這不是一個真正的問題NSTask。打開終端(和運行bash如果你使用tcsh),並做

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

這是行不通的。您需要做

$ cd "$FUBAR" 

改爲。這是因爲sh的擴展規則。閱讀bash手冊,例如here,部分名稱爲EXPANSION。來自shell腳本引擎的This section也可能有所幫助。