Использование функции getenv - PullRequest
2 голосов
/ 23 марта 2011

У меня есть программа на C, которая печатает каждую переменную окружения, имя которой дается stdin.Он печатает переменные, такие как $ PATH, $ USER, но не видит переменные окружения, которые я определяю в оболочке Linux ... Например, в bash я определяю my = 4 и ожидаю, что программа вернет 4, когда явведите "my".

int main  () {
  char * key = (char * )malloc(30);

  scanf("%s", key);

  if(getenv(key) != NULL)
    printf("%s\n", getenv(key));
  else
    printf("NULL\n");

  return 0;
}

Что я могу сделать, чтобы улучшить результаты getenv?Я хочу, чтобы он показал мне все переменные окружения со всеми наследованиями из оболочки Linux.Спасибо ..

Ответы [ 3 ]

6 голосов
/ 23 марта 2011

Есть несколько способов:

  1. my=4; export my; ./program
  2. my=4 ./program
  3. env my=4 ./program

Каждый из этих методов имеет одинаковый эффект, но через разные механизмы.

  1. Этот метод специфичен для используемой вами оболочки, хотя он работает аналогично большинству типичных оболочек (варианты оболочек Bourne; оболочки, полученные из csh, снова отличаются) Сначала устанавливается переменная оболочки , затем экспортируется ее в переменную среды , а затем запускается ваша программа. На некоторых оболочках вы можете сократить это как export my=4. Переменная остается установленной после запуска вашей программы.

  2. Этот метод также зависит от вашей оболочки. Это устанавливает переменную окружения my , временно для этого выполнения ./program. После запуска my не существует (или имеет свое первоначальное значение).

  3. При этом используется программа env для установки переменной среды перед запуском вашей программы. Этот метод не зависит от какой-либо конкретной оболочки и является наиболее переносимым. Как и метод 2, это временно устанавливает переменную среды. Фактически, оболочка даже не знала, что установлено my.

4 голосов
/ 23 марта 2011

Если вы не export, то это просто переменная оболочки, а не переменная окружения. Используйте export my=4 или my=4; export my.

3 голосов
/ 23 марта 2011

Это не имеет ничего общего с C или getenv. Если вы делаете my=4 в оболочке, вы определили локальную переменную оболочки. Чтобы сделать это переменной среды, выполните export my.

...