Question

I am to program a simple shell in linux that can implement various stuffs including environment variables. I tried printing these variables using getenv but I have some problems. getenv always return NULL even if the user types a correct variable like $HOME for example. Here is my code

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);
               }

It doesn't enter into the else condition. For example if the user types echo ls $HOME. This input is parsed into the cmdArgv which is a char **. Then the output I have is

not a variable
ls
not a variable
$HOME

BUT $HOME is a variable so maybe my implementation of getenv isn't right. Any ideas as to what seem to be the problem? Thanks.

Was it helpful?

Solution

The variable is called HOME, not $HOME. (The latter is your shell's syntax for expanding the variable.)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top