【问题标题】:HOSTNAME set in environment but not visible to gmakeHOSTNAME 在环境中设置但对 gmake 不可见
【发布时间】:2011-06-15 04:37:12
【问题描述】:

这多年来一直困扰着我。谁能解释为什么$(HOSTNAME) 没有扩展到环境值 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

【问题讨论】:

    标签: bash makefile environment-variables gnu-make


    【解决方案1】:

    这是shell变量和环境变量之间的区别。尝试在测试前运行“export HOSTNAME”,看看有什么不同。

    另外,比较“set”和“env”的输出差异。

    【讨论】:

      【解决方案2】:

      当您在 shell 中启动子进程时(可能通过运行make 命令),它会继承 shell 的原始环境变量,以及从 shell 内部“导出”的所有变量。如果 shell 的原始环境没有 $HOSTNAME 并且 $HOSTNAME 没有被导出,那么它就不会处于衍生进程的环境中。

      运行export 以查看导出变量的列表。在我的系统上,默认情况下 $HOSTNAME 不在导出中。如果您希望 HOSTNAME 在衍生进程中可用,您可以在命令行或 .bashrc/profile 中 export HOSTNAME

      【讨论】:

        【解决方案3】:

        如果要导出主机名,可以使用:

        export SERVERIP=$(hostname --ip-address)
        echo $SERVERIP
        

        【讨论】:

        • 这是导出 IP 地址而不是主机名
        猜你喜欢
        • 1970-01-01
        • 2021-07-24
        • 2021-03-18
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        相关资源
        最近更新 更多