почему -C не меняет $ PWD, как это видно на языке сценариев, таком как Perl? - PullRequest
1 голос
/ 30 мая 2019

Вот 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?

Согласно инструкции Make, опция -C сначала вызывает «изменение каталога» (рабочего каталога?).

То же самое происходит с Python.

1 Ответ

3 голосов
/ 30 мая 2019

Поскольку переменная окружения PWD не содержит текущий рабочий каталог;он содержит независимо от текущего рабочего каталога, когда последний раз sh устанавливал его .Все, кроме запуска оболочки или оболочки, выполняющей встроенную функцию cd (или подобную встроенную функцию, подобную pushd, в оболочках, в которой она есть), не влияет на PWD и полагается на PWD где-либо, кромев скорлупе наверное глупая идея.Используйте взамен getcwd (C), Cwd::getcwd (Perl), os.getcwd (Python) и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...