#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. Это зависит от версии вашей системы. Смотрите предложения здесь . (Я не знаю, насколько хорошо ответы работают сейчас; я не чувствовал необходимости делать это годами,)