objective-c - OS X GUI Cocoa 应用程序与 shell 交互

标签 objective-c cocoa shell terminal

背景:

我们正在开发一个仅供内部使用的 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/

相关文章:

linux - 在 shell 脚本中使用 ssh 连接的 mysqldump

objective-c - 如何通过Health Kit将健康记录添加到健康App

xcode - Cocoa 中的相互依赖导致编译错误

linux - Bash 脚本对文件进行排序,然后转储到文件中

macos - OS X 上的 Dock 和菜单栏是否有预定义的 NSColor?

objective-c - NSThread 内存泄漏

linux - 如何使用带引号的字段(可能包含分隔符)对 CSV 进行排序

objective-c - 使用if循环中的类的实例时发生定义错误

objective-c - 数组的大小 - iOS

ios - Tableview标题单元格在swift中使用相同的cardView扩展?