为什么不像通过Perl这样的脚本语言看到的那样-C改变$ PWD?

时间:2019-05-30 20:11:04

标签: perl gnu-make

这里是temp/Makefile

all:
    echo $$PWD
    echo $(CURDIR)
    perl -e 'print $$ENV{"PWD"}' 

现在

$make -C temp
make: Entering directory `/home/mgaleck/temp'
/home/mgaleck/temp
/home/mgaleck/temp
/home/mgaleck
make: Leaving directory `/home/mgaleck/temp'

为什么没有temp的第三个值?

根据制作手册,-C选项导致首先“更改目录”(工作目录?)。

Python也发生了同样的事情。

1 个答案:

答案 0 :(得分:3)

因为PWD环境变量不保存当前的工作目录;无论当前工作目录是sh上次设置的时间,它都会保存 。除了启动外壳程序或执行内置cd的外壳程序(或具有pushd的类似内置程序的外壳程序)外,对外壳程序PWD并没有任何影响在PWD上,除了外壳程序之外的任何地方,可能都是一个愚蠢的想法。改用getcwd(C),Cwd::getcwd(Perl),os.getcwd(Python)等。