Makefile中使用id -u获取UID无效,求助解决方法
解决Makefile中获取用户UID无输出的问题
这个问题我之前踩过坑!核心原因是Makefile里的$符号有特殊作用——它是用来引用Make自身变量的标记,而不是让shell执行命令的语法。
你写的$(id -u),Make会把它当成一个名为id -u的Make变量来解析,但这个变量根本不存在,所以展开后是空字符串,执行自然就没输出了。
给你两种可行的解决方案:
方案1:转义$符号传递给shell
在Makefile里,用两个$来表示一个真正的$,这样shell就能正确解析$(id -u)命令了:
perm-user: @echo $$(id -u)
这种方式是让shell在执行目标时才去调用id -u,适合需要每次执行都重新获取UID的场景。
方案2:使用Make的shell函数
Make内置了$(shell ...)函数,可以直接在Make解析阶段执行shell命令并返回结果,然后把结果替换到代码里:
perm-user: @echo $(shell id -u)
这种方式会在Make开始处理这个目标前就获取到UID,适合UID不会变化的场景,效率稍高一点。
你可以根据自己的需求选其中一种,两种都能正常输出你的UID~
内容的提问来源于stack exchange,提问作者Nicolas S.
相关产品推荐
相关产品推荐

