2012-01-24 80 views
0

在主函數體中,我需要調用系統(RELATIVE_PATH + /MyShellScript.sh)。腳本和其他相關的東西駐留在主項目包中。如何獲得相對路徑?恕我直言,它應該是可以從主要參數提取它 - 「的char * argv的[]」 ...如何獲得可可程序運行的路徑?

回答

0
int main (int argc, const char * argv[]) 
{ 
    NSLog(@"%s", argv[0]); 
    return 0; 
} 

輸出

2012-01-24 21:33:22.015 CLIXMPLParser[13042:707] /Users/zrxq/Library/Developer/Xcode/DerivedData/CLIXMPLParser-dsibnvwgoqvjnvbhlxkyzcojqnwr/Build/Products/Debug/CLIXMPLParser 
+1

雖然'argv的[0]'*可能*包含路徑到您的應用程序,我不相信有是任何保證它將 - 底層API中的路徑和'的argv [0]'是不同的參數,並且可以是不同的(這個功能實際上是使用某些程序,以確定它們的行爲 - 測試'的argv [0]'用於不同的值)。可可的正確答案是在Rob Keniger的回答中使用'NSBundle'。 – CRD

+0

@CRD是對的; 'argv [0]'包含調用可執行文件的名字,這不一定和它的完整路徑相同。 –

4

究竟是你想做些什麼?你的shell腳本是做什麼的,你爲什麼從main()打電話給它?您通常不需要修改Cocoa應用程序中的main()函數。

一般來說,你應該避免使用shell腳本,除非絕對必要,但如果你要那麼你應該創建一個NSTask對象,並用它來執行你的腳本。如果你想在啓動運行它,你應該把你的代碼來啓動應用程序委託的applicationDidFinishLaunching:方法腳本。

可以使用的NSBundle各種方法讓您的應用程序的包裏面的路徑資源:

NSString* path = [[NSBundle mainBundle] pathForResource:@"MyShellScript" ofType:@"sh"]; 
+0

你看,我已經下載了Oracle JDeveloper工具(包含在其內的文件夾和java文件的文件夾),然而,這些工具運行雖然在一些2級文件夾一些shell腳本。所以,我很好奇如何在jdeveloper上創建一個「包裝器」,只是想創建.app包,爲了方便起見。目前,我能夠運行腳本和JDeveloper從預定義的位置,所以需要知道如何通過一個相對路徑system()調用。 – Centurion

相關問題