【问题标题】:How to get a bash instance with loaded default profiles within objective-C如何在 Objective-C 中获取加载了默认配置文件的 bash 实例
【发布时间】:2010-11-28 23:37:13
【问题描述】:

问题: 我希望能够从我的可可应用程序(OS X)中运行一个 bash 实例,并加载所有正常的配置文件(~/.bash_profile 等)。我不想想要手动加载配置文件,因为我想要一个默认的 bash 实例,该实例与您通过触发终端获得的实例完全相同。从那里,我想检索一些预定义的环境变量(Ruby 版本管理器的变量)。

我尝试过的: 我已经尝试了一些没有成功的解决方案。让我在这里列出它们:

  1. NSTask
  2. system() 调用

对于每个解决方案,我都尝试执行“/bin/sh -l”来加载一个 bash 实例作为当前用户名......不幸的是它没有工作。

【问题讨论】:

  • 你的意思是如何执行?我以启动程序的用户身份执行程序,我没有分叉进程

标签: cocoa macos bash rvm


【解决方案1】:

当您将bash 作为sh 运行时,它会在不读取.bash_profile 的兼容模式下运行。如果您想运行bash,然后运行/bin/bash(或者如果您希望其他人使用您的应用程序,请确保您考虑了用户选择的任何外壳。)

【讨论】:

  • 我明天试试。好像很有道理!
  • 成功了。这仍然不是我想要的,但这正在回答上面的问题。谢谢!
【解决方案2】:

您可以使用命令行选项“--login”告诉bash 充当登录shell。

传统上,如果 argv[0] 的基本名称以破折号开头,则 shell 将充当登录 shell。

您也许可以通过以下方式获得所需的效果:

bash --login -c 'echo $RUBY_VARIABLE_OF_INTEREST'

如果您使用 popen() 执行此操作,则可以从 shell 读取输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2022-10-22
    • 2010-12-19
    • 2019-12-01
    • 1970-01-01
    • 2022-10-23
    • 2015-09-12
    相关资源
    最近更新 更多