Objective c OSX GUI可可应用程序与shell交互

Objective c OSX GUI可可应用程序与shell交互,objective-c,cocoa,shell,terminal,Objective C,Cocoa,Shell,Terminal,背景: 我们正在开发一个内部仅供使用的cocoa应用程序,以帮助我们完成一些基本的系统管理任务和复杂的网站部署。这个应用程序基本上是许多不同bashshell命令的包装器。这些命令的输出有时需要解析或显示给用户 我们已经使用了NSTask,并且能够启动一些脚本。但是,这似乎有点麻烦(需要设置确切的路径,分别传递每个参数,等等)。如果这实际上是首选方法,我们可以以这种方式使用NSTask 到目前为止,最大的挑战是设置shell环境。我们与许多ruby gems和程序交互,并使用capistrano

背景:

我们正在开发一个内部仅供使用的cocoa应用程序,以帮助我们完成一些基本的系统管理任务和复杂的网站部署。这个应用程序基本上是许多不同bashshell命令的包装器。这些命令的输出有时需要解析或显示给用户

我们已经使用了NSTask,并且能够启动一些脚本。但是,这似乎有点麻烦(需要设置确切的路径,分别传递每个参数,等等)。如果这实际上是首选方法,我们可以以这种方式使用NSTask

到目前为止,最大的挑战是设置shell环境。我们与许多ruby gems和程序交互,并使用capistrano进行部署

问题是:


我们如何像用户一样与具有环境设置的shell交互?(别名、rvm、ruby、路径)

您将在Terminal.app中看到的shell中设置的环境变量几乎仅限于您在终端上下文中使用的任何shell。它不是由“
NSTask
”自动拾取的

但是。。。你有选择的余地

您可以通过“
~/.launchd.conf
”文件设置更多由NSTask拾取的通用环境变量,也可以通过“”(其中启动路径是您的shell)将“
NSTask
”的shell设置为与终端中的shell相匹配(这意味着您拾取.bashrc或.profile或任何初始化路径)

当然,您也可以在工具中调用“”。这也可能会拾取“
~/.launchd.conf
”文件中设置的变量


您的“cocoa应用程序”是GUI应用程序(带有按钮、窗口和铃铛和口哨)还是通过Terminal.app显示的shell调用的工具?是的,它是GUI应用程序-我已更新了问题标题以反映这一点。到目前为止,您有三张“关闭此问题”投票(但不是我的投票),尽管我认为投票结束的人没有仔细考虑你的问题:你问的是一个编程问题。今天晚些时候,如果没有其他人回答,我可能会自己回答,但我认为需要进行一些研究,看看NSTask甚至调用“
system()
”会自动提取哪些环境变量。太好了!你给我指出了一个对我很有效的解决方案。。。通过
[task setLaunchPath:@/bin/bash]