初识Linux环境变量

    技术2022-05-11  34

          Linux是一个多用户的操作系统,用户登入系统后,都会有一个专用的运行环境,这个默认环境实际上就是一组环境变量的定义。用户可以定制自己的运行环境,修改相应的系统环境变量。

          常见的环境变量有:

          HOSTNAME指主机的名称。

          LANG指和语言相关的环境变量。

          应用程序常常增加一些环境变量,例如使用JAVA就要设置JAVA_HOME和CLASSPATH等,输入法增加环境变量XMODIFIERS=@im=fcitx等。

          在Shell中常用的环境变量命令:

    1. 显示环境变量HOME

        $echo $HOME

    2. 设置一个新的环境变量 WELCOME

        $export WELCOME="Hello!"

    3. 使用env显示所有的环境变量

        $env

    4. 使用set命令显示所有本地定义的shell变量

        $set

    5. 用unset命令清除环境变量

        $unset

    6. 使用readonly命令设置只读环境变量

        $readonly TEST

     

         在应用程序中,可以使用C函数getenv,setenv,unsetenv来设置环境变量。

         举个例子,说明父进程与子进程之间环境变量的传递。

         在父进程中,通过setenv设置http_proxy环境变量值,然后调用wget程序去拿文件。wget这个子进程通过getenv得到环境变量,根据此设置去下载文件。

        在父进程中,执行一个子进程函数如下:

    static int execve_program(char **argv,int isWait) {     pid_t pid, childpid;     int status, istatus;        printf("execve_program:%s %s start/n",argv[0],argv[1]);     pid = vfork ();     if (pid == 0)     {            // we are the child         execvp (argv[0], argv);         _exit (1);     }     else if(isWait)     {         childpid = wait (&status);                istatus=WEXITSTATUS(status);     }     printf("execve_program:%s %s end/n",argv[0],argv[1]);     return istatus; }     实践证明,使用execvp函数,可以将环境变量传递给子进程。当时试过execve函数,不太清楚如何设置最后一个参数,最后一个参数若为NULL,子进程通过getenv不能得到主进程设置的环境变量。


    最新回复(0)