背景:
我们正在开发一个仅供内部使用的 cocoa 应用程序,以帮助我们完成一些基本的系统管理任务和复杂的网站部署。该应用程序基本上是许多不同 bash shell 命令的包装器。这些命令的输出有时需要解析或显示给用户。
我们已经尝试过 NSTask 并且能够启动一些脚本。然而,这似乎有点麻烦(需要设置确切的路径,单独传递每个参数,等等......)。如果这实际上是首选方法,我们可以以这种方式使用 NSTask。
迄今为止最大的挑战是设置 shell 环境。我们与许多 ruby gem 和程序进行交互,并使用 capistrano 进行部署。
问题是:
我们如何像用户一样通过环境设置与 shell 进行交互? (别名、rvm、ruby、路径)
最佳答案
您将在 Terminal.app 的 shell 中看到设置的环境变量几乎仅限于您在终端上下文中使用的任何 shell。它不会被“NSTask
”自动拾取。
但是...你确实有选择。 Some of them are described in answers to this related question .
您可以通过“~/.launchd.conf
”文件设置 NSTask 获取的更多通用环境变量,或者您也可以设置“NSTask
”通过“[NSTask setLaunchPath:]
”(其中启动路径是您的 shell)匹配终端中的那个(这意味着您选择 .bashrc 或 .profile 或任何初始化路径)。 p>
当然,您也可以从工具中调用“system()
”。这也可能会获取“~/.launchd.conf
”文件中设置的变量。
More information on environment variables is available in this question.
关于objective-c - OS X GUI Cocoa 应用程序与 shell 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478755/