Как исправить ‘sh: brew: команда не найдена’ в Xcode?

#c #xcode #terminal

#c #xcode #терминал

Вопрос:

Я создаю инструмент командной строки в Xcode и хочу вызывать команды терминала с помощью моего кода на C .

Я обнаружил, что system() функция может запускать команды терминала. И я знаю, что команды, которые я хочу, работают в моем терминале. Но эти команды не работают одинаково, когда я вызываю их с помощью system() в Xcode.

Например, я попытался вызвать команду brew в Xcode.

 system("brew");
  

Я ожидаю, что результат будет таким же, как при вводе brew в мой терминал:

 Example usage:
  brew search [TEXT|/REGEX/]
  ...etc
  

но фактический вывод в Xcode sh: brew: command not found .

Почему system() действует иначе, чем terminal? Должен ли я использовать другую функцию?

Комментарии:

1. /usr/local/bin , где brew находится, скорее всего, отсутствует в PATH переменной окружения. Попробуйте запустить его, используя его абсолютный путь: /usr/local/bin/brew .

2. @cfillion Спасибо, это сработало! Вы знаете, как добавить это в XCode, чтобы мне не нужно было каждый раз писать абсолютный путь?

3. также @cfillion можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог отметить это решенным? ty

Ответ №1:

system не загружает файлы конфигурации вашей оболочки, и именно здесь /usr/local/bin добавляется к PATH переменной окружения.
(Этот каталог не включен по умолчанию в OS X.)

Вероятно, простейшими решениями являются либо использование полного пути, либо запуск XCode из терминала, чтобы он унаследовал вашу оболочку PATH .

(Более подробную информацию о том, как PATH работает, и переменных среды в целом, можно найти в любом введении в системы Unix-y.)

Комментарии:

1. Отлично! Я попробовал абсолютный путь @cfillion, и это сработало. Есть ли способ, которым я могу добавить это в PATH переменную в XCode?

2. Это зависит от версии вашей системы. Смотрите предложения здесь . (Я не знаю, насколько хорошо ответы работают сейчас; я не чувствовал необходимости делать это годами,)