Выполнить команду SET в программе c - PullRequest
2 голосов
/ 03 февраля 2012

Я создал небольшую мини-оболочку, и она позволила пользователю ввести команду, подобную 'ls', и она выведет список содержимого каталога так, как будто он должен использовать execv () в моем коде, но это не похожекогда пользователь вводит что-то вроде 'set name = "bob"'.Я искал повсюду то, что я должен использовать в своем коде для выполнения команды set, когда пользователь вводит ее, и лучшее, что я могу найти, это system (), но это все еще не работает для меня.Есть идеи?

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

set - это встроенная в оболочку команда, а не внешняя команда (на самом деле она должна иметь желаемый эффект, то есть модифицировать переменную оболочки внутри самого процесса оболочки).

Этоозначает, что вам нужно искать и обрабатывать set внутри самой оболочки, добавляя именованную переменную в некоторую внутреннюю структуру данных, которая отслеживает переменные оболочки (или обновляя ее, если она там уже существует).

0 голосов
/ 03 февраля 2012

Возможно, вы захотите взглянуть на setenv (3) и getenv (3).Это функции для изменения и чтения переменных среды из программы на Си.

0 голосов
/ 03 февраля 2012

Поскольку вы выполняете fork-and-exec или system (), команда действительно выполняется в отдельном процессе. То, что происходит в этом процессе (например, установка переменной среды), не влияет на среду родителя. (Отдельная проблема заключается в том, что set на самом деле не создает переменную окружения. Для этого вам потребуется export в [ba] sh или setenv в [t] csh.)

Так что вам нужно кодировать мини-оболочку для явной обработки команды set, а не передавать ее другой программе.

...