Как получить экземпляр bash с загруженными профилями по умолчанию в target-C - PullRequest
0 голосов
/ 29 ноября 2010

Проблема: Я хочу иметь возможность запустить экземпляр bash из моего приложения какао (OS X) со всеми загруженными обычными профилями (~ / .bash_profile и т. Д.).Я не хочу загрузить профили вручную, так как я хочу, чтобы экземпляр bash по умолчанию был точно таким же, какой вы получили бы при запуске терминала.Оттуда я хотел бы получить некоторую предопределенную переменную среды (переменные менеджера версий Ruby).

Что я пробовал: Я уже попробовал некоторые решения без успеха,Позвольте мне перечислить их здесь:

  1. NSTask
  2. системный вызов ()

для каждого решения, которое я пытался выполнить "/ bin / sh -l"чтобы экземпляр bash был загружен как текущее имя пользователя ... к сожалению, это не сработало.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Когда вы запускаете bash как sh, он работает в режиме совместимости, где он не читает .bash_profile.Если вы хотите запустить bash, а затем запустить /bin/bash (или если вы хотите, чтобы другие пользователи использовали ваше приложение, убедитесь, что вы учитываете любую оболочку, выбранную пользователем.)

0 голосов
/ 29 ноября 2010

Вы можете использовать параметр командной строки '--login', чтобы указать bash вести себя как оболочка входа в систему.

Классически оболочка будет действовать как оболочка входа в систему, если базовое имя ее argv[0] начинается с тире.

Вы можете получить требуемый эффект с помощью:

bash --login -c 'echo $RUBY_VARIABLE_OF_INTEREST'

Если вы делаете это с popen(), вы можете прочитать вывод из оболочки.

...