bash:PWD 和 CURDIR 有什么区别?

2024-04-29

我的问题

我使用 Makefile 来运行docker runtarget,需要当前工作目录作为其参数之一。

我使用任一$(PWD) or $(CURDIR):

build: Dockerfile
        docker run ... <$(PWD) or $(CURDIR)>

他们似乎正在产生相同的价值。我不知道是否有一些细微的差异会在以后困扰我,所以我想知道它们各自的确切定义。

我尝试过什么

  • STFW
  • man make

我的问题

有什么区别$(PWD) and $(CURDIR)在 Makefile 中?


TL;DR

Use CURDIR.

Why?

首先,谢谢雷诺·帕卡莱特 https://stackoverflow.com/users/1773798/renaud-pacalet for 他的评论 https://stackoverflow.com/questions/52437728/bash-what-is-the-difference-between-pwd-and-curdir?noredirect=1#comment91819615_52437728.

CURDIR

引用GNU 制作手册 https://www.gnu.org/software/make/manual/make.html#Quick-Reference:

CURDIR

设置为当前工作目录的绝对路径名。

为了方便起见,当 GNU make 启动时(在处理任何 -C 选项之后),它将变量 CURDIR 设置为当前工作目录的路径名。 make 再也不会触及该值:特别注意,如果包含其他目录中的文件,则 CURDIR 的值不会更改。该值与在 makefile 中设置的值具有相同的优先级(默认情况下,环境变量 CURDIR 不会覆盖该值)。请注意,设置此变量对 make 的操作没有影响(例如,它不会导致 make 更改其工作目录)。

PWD

没有参考PWD在制作手册中。一个快速env | grep PWD发现它是由环境设置的(在我的例子中是 zsh)。 GNU 的注释特殊的 shell 变量 https://www.gnu.org/software/autoconf/manual/autoconf-2.61/html_node/Special-Shell-Variables.html声明:

PWD

Posix 1003.1-2001 要求 cd 和 pwd 必须更新 PWD 环境变量以指向当前目录的逻辑名称,但传统 shell 不支持这一点。如果一个 shell 实例维护 PWD,但附属的不同 shell 不知道 PWD 并执行 cd,则这可能会导致混乱;在这种情况下,PWD 指向错误的目录。使用``密码' rather than $PWD'.

Since CURDIR保证可以工作Make in PWD might是从shell继承的,应该优先选择前者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash:PWD 和 CURDIR 有什么区别? 的相关文章

随机推荐