2012-01-24 3 views
0

main 함수 본문에서 system (RELATIVE_PATH +/MyShellScript.sh)을 호출해야합니다. 스크립트 및 기타 관련 자료는 기본 프로젝트 번들에 있습니다. 상대 경로를 얻는 방법? 그것이 가능해야 이럴 주요 매개 변수에서 압축을 풉니 다 - "문자의 *의 변수는 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]'for 다른 값). Cocoa에 대한 정답은 Rob Keniger의 대답에서와 같이 NSBundle을 사용하는 것입니다. – CRD

+0

@CRD가 옳다. 'argv [0]'에는 실행 파일이 호출 된 이름이 포함되어 있습니다.이 이름은 반드시 전체 경로와 동일하지는 않습니다. –

4

? 쉘 스크립트는 무엇을하고 있으며, 왜 main()에서 호출하고 있습니까? 일반적으로 코코아 응용 프로그램에서 main() 함수를 수정하지 않아야합니다.

일반적으로 절대적으로 필요하지 않으면 쉘 스크립트를 사용하지 말아야하지만, 그렇다면 반드시 NSTask 개체를 만들어 스크립트를 실행해야합니다. 시작할 때 스크립트를 실행하려면 응용 프로그램 위임자의 applicationDidFinishLaunching: 메서드에서 스크립트를 시작하는 코드를 배치해야합니다.

당신은 NSBundle의 다양한 방법을 사용하여 앱의 번들 내부 자원에 대한 경로를 얻을 수 있습니다 :

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

당신은 Oracle JDeveloper 도구 (내부 폴더와 java 파일을 포함하고있는 폴더)를 다운로드했지만 도구는 일부 2 차 레벨 폴더의 일부 셸 스크립트를 통해 실행됩니다. 그래서, 나는 그 jdeveloper 주위에 "wrapper"를 만드는 방법에 관심이 있었고 편의상 .app 패키지를 만들고 싶었다. 현재 스크립트와 jdeveloper를 미리 정의 된 위치에서 실행할 수 있으므로 system() 호출에 상대 경로를 전달하는 방법을 알아야합니다. – Centurion

관련 문제