Objective c 如何获得cocoa程序运行的路径?

Objective c 如何获得cocoa程序运行的路径?,objective-c,cocoa,shell,Objective C,Cocoa,Shell,在主函数体中,我需要调用系统(RELATIVE_PATH+/MyShellScript.sh)。脚本和其他相关内容驻留在主项目包中。如何获得相对路径?IMHO应该可以从主参数“char*argv[]”中提取它 输出 2012-01-24 21:33:22.015 CLIXMPLParser[13042:707] /Users/zrxq/Library/Developer/Xcode/DerivedData/CLIXMPLParser-dsibnvwgoqvjnvbhlxkyzcojqnwr/Bu

在主函数体中,我需要调用系统(RELATIVE_PATH+/MyShellScript.sh)。脚本和其他相关内容驻留在主项目包中。如何获得相对路径?IMHO应该可以从主参数“char*argv[]”中提取它

输出

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

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

你到底想干什么?shell脚本在做什么,为什么要从
main()
调用它?在Cocoa应用程序中,通常不需要修改
main()
函数

通常,除非绝对必要,否则应避免使用shell脚本,但如果必须使用,则应创建
NSTask
对象并使用该对象执行脚本。如果要在启动时运行脚本,应将用于启动脚本的代码放在应用程序代理的
applicationdFinishLaunching:
方法中

您可以使用
NSBundle
的各种方法获取应用程序包中资源的路径:

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

你到底想干什么?shell脚本在做什么,为什么要从
main()
调用它?在Cocoa应用程序中,通常不需要修改
main()
函数

通常,除非绝对必要,否则应避免使用shell脚本,但如果必须使用,则应创建
NSTask
对象并使用该对象执行脚本。如果要在启动时运行脚本,应将用于启动脚本的代码放在应用程序代理的
applicationdFinishLaunching:
方法中

您可以使用
NSBundle
的各种方法获取应用程序包中资源的路径:

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

虽然
argv[0]
可能包含应用程序的路径,但我不相信它会有任何保证-在底层API中,路径和
argv[0]
是不同的参数,可以不同(某些程序实际使用此功能来确定其行为-测试
argv[0]
用于不同的值)。Cocoa的正确答案是使用
NSBundle
,就像Rob Keniger的答案一样。@CRD是正确的
argv[0]
包含调用可执行文件的名称,该名称不一定与它的完整路径相同。虽然
argv[0]
可能包含您的应用程序的路径,但我不相信它会在底层API中包含路径和
argv[0]
是不同的参数,可以是不同的(某些程序实际使用此功能来确定其行为-针对不同值的测试
argv[0]
)。Cocoa的正确答案是使用
NSBundle
,就像Rob Keniger的答案一样。@CRD是正确的
argv[0]
包含调用可执行文件的名称,该名称不一定与它的完整路径相同。您知道,我已经下载了Oracle JDeveloper工具(一个包含内部文件夹和java文件的文件夹),但是,这些工具通过某个二级文件夹中的一些shell脚本运行。所以,我很好奇如何在jdeveloper周围制作一个“包装器”,只是为了方便起见,想创建.app包。目前,我能够从预定义的位置运行脚本和jdeveloper,因此需要知道如何将相对路径传递到system()调用。您知道,我已经下载了Oracle jdeveloper工具(一个包含内部文件夹和java文件的文件夹),但是,这些工具通过一些二级文件夹中的shell脚本运行。所以,我很好奇如何在jdeveloper周围制作一个“包装器”,只是为了方便起见,想创建.app包。目前,我能够从预定义的位置运行脚本和jdeveloper,因此需要知道如何将相对路径传递给system()调用。