HOSTNAME在环境中设置,但对gmake不可见

| 这困扰了我好多年。谁能解释为什么“ 0”不扩展为环境值HOSTNAME?谷歌搜索\“ make \”,\“ hostname \”,\“ gmake \”,\“ not set \”等各种组合对我来说并没有收获。
jcomeau@intrepid:/tmp$ set | egrep \'HOSTNAME|USER\'
HOSTNAME=intrepid
USER=jcomeau
jcomeau@intrepid:/tmp$ cat Makefile 
%.test:
    set | grep $*
%.env:
    echo $($*)
jcomeau@intrepid:/tmp$ make HOSTNAME.test
set | grep HOSTNAME
BASH_EXECUTION_STRING=\'set | grep HOSTNAME\'
HOSTNAME=intrepid
jcomeau@intrepid:/tmp$ make HOSTNAME.env
echo 

jcomeau@intrepid:/tmp$ make USER.test
set | grep USER
BASH_EXECUTION_STRING=\'set | grep USER\'
USER=jcomeau
jcomeau@intrepid:/tmp$ make USER.env
echo jcomeau
jcomeau
    
已邀请:
        这是外壳变量和环境变量之间的区别。尝试在测试之前运行\“导出HOSTNAME \”,看看有什么不同。 另外,比较\“ set \”和\“ env \”之间的输出差异。     
        当您在外壳程序中启动子进程时(可能通过运行
make
命令),它会继承外壳程序的原始环境变量以及外壳程序内部的所有\“ exported \”变量。如果Shell的原始环境没有$ HOSTNAME且没有导出$ HOSTNAME,则它将不在衍生进程的环境中。 运行
export
以查看导出变量的列表。在我的系统上,$ HOSTNAME默认不在导出中。如果希望HOSTNAME在生成的进程中可用,则可以在命令行或.bashrc / profile中单击4。     
        如果要导出主机名,可以使用:
export SERVERIP=$(hostname --ip-address)
echo $SERVERIP
    

要回复问题请先登录注册