如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。