Реализация переменных среды в простой оболочке Linux - PullRequest
0 голосов
/ 28 ноября 2011

Я должен программировать простую оболочку в linux, которая может реализовывать различные вещи, включая переменные окружения.Я попытался напечатать эти переменные, используя getenv, но у меня есть некоторые проблемы.getenv всегда возвращает NULL, даже если пользователь вводит правильную переменную, например, $HOME.Вот мой код

int i = 0;
if(strcmp(cmdArgv[i], "echo") == 0){
                char *variable;
                for(i = 1; cmdArgv[i] != NULL; i++){
                    variable = getenv(cmdArgv[i]);
                    if(!variable){
                        puts("not a variable");
                           printf("%s ", cmdArgv[i]);
                        }else{
                            puts("a variable");
                            printf("%s ", variable);
                        }
                   }
                   printf("\n");
                   exit(0);
               }

Он не входит в условие else.Например, если пользователь вводит echo ls $HOME.Этот вход анализируется в cmdArgv, который является char **.Тогда у меня получится

not a variable
ls
not a variable
$HOME

НО $HOME - переменная, поэтому, возможно, моя реализация getenv не верна.Любые идеи относительно того, что кажется проблемой?Спасибо.

1 Ответ

7 голосов
/ 28 ноября 2011

Переменная называется HOME, а не $HOME. (Последний - это синтаксис вашей оболочки для расширения переменной.)

...