【发布时间】:2011-11-27 23:30:07
【问题描述】:
我要在 linux 中编写一个简单的 shell,它可以实现包括环境变量在内的各种东西。我尝试使用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 的实现可能不正确。关于似乎是什么问题的任何想法?谢谢。
【问题讨论】:
标签: c linux shell environment-variables getenv