首页 > 解决方案 > 尽管终端回显工作,C 程序 getenv() 返回 null

问题描述

我已经阅读了所有其他具有相同标题的帖子,但我不在嵌入式系统上,并且我的包含和环境变量设置正确。在 RHEL 7.5 上运行时,我的 getenv 程序无法运行,因此我创建了一个 C 应用程序,它具有打印 JAVA_HOME 环境变量的简单功能。它从 C 程序返回 null 但环境变量已设置(已永久设置)并且在我的 putty 终端中读取良好。这正是我正在运行的(只是缩短了路径):

C:

#include <stdio.h>
#include <stdlib.h>

int main () {
   printf("JAVA HOME : %s\n", getenv("JAVA_HOME"));

   return(0);
}

生成文件:

CC=gcc
CFLAGS=-c -Wall -I/path/to/includes
BIN=/path/to/bin

INCLUDE=/path/to/includes

default : $(BIN)/testEnv


testEnv.o : testEnv.c
    $(CC) $(CFLAGS) testEnv.c

#------------ Make testEnv-------------------
$(BIN)/testEnv: testEnv.o
    $(CC) -o $@  \
    testEnv.o

终端:

>bin/testEnv
JAVA HOME : (null)
>echo $JAVA_HOME
/path/to/java

有没有人有什么新的东西我应该检查或知道问题可能是什么?谢谢。

标签: clinuxrhelgetenv

解决方案


您的JAVA_HOME变量可能是一个 shell 变量,而不是导出的变量。确保在从此 shell 启动您的应用程序之前将其导出:

export JAVA_HOME

推荐阅读