bash: В чем разница между PWD и CURDIR? - PullRequest
0 голосов
/ 21 сентября 2018

Моя проблема

Я использую Makefile для запуска цели docker run, для которой в качестве одного из параметров требуется текущий рабочий каталог.

Я использую либо $(PWD), либо $(CURDIR):

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

Кажется, они производят одинаковое значение.Я не знаю, есть ли какая-то небольшая разница, которая может укусить меня позже, поэтому я хочу знать точное определение каждого из них.

Что я пробовал

  • STFW
  • man make

Мой вопрос

В чем разница между $(PWD) и $(CURDIR) в Makefile?

1 Ответ

0 голосов
/ 21 сентября 2018

TL; DR

Использование CURDIR.

Почему?

Во-первых, спасибо Renaud Pacalet за его комментарий .

CURDIR

Цитирование GNU Руководство по эксплуатации :

CURDIR

Установить абсолютный путь к текущему рабочему каталогу.

Для вашего удобства, когда GNU make запускается (после обработки любых опций -C), она устанавливает переменную CURDIR в путь.текущего рабочего каталога.Make никогда не затрагивает это значение: обратите внимание, что если вы включаете файлы из других каталогов, значение CURDIR не меняется.Значение имеет тот же приоритет, что и при установке в make-файле (по умолчанию переменная окружения CURDIR не будет переопределять это значение).Обратите внимание, что установка этой переменной не влияет на работу make (например, она не приводит к тому, что make меняет свой рабочий каталог).

PWD

Нет ссылкидо PWD в руководстве по изготовлению.Быстрый env | grep PWD обнаружил, что это было установлено средой (в моем случае, zsh).Замечания GNU по поводу специальных переменных оболочки гласят, что:

PWD

Posix 1003.1-2001 требует, чтобы cd и pwd должны были обновить переменную среды PWD, чтобы она указывала налогическое имя текущего каталога, но традиционные оболочки не поддерживают это.Это может вызвать путаницу, если один экземпляр оболочки поддерживает PWD, но вспомогательная и другая оболочка не знает о PWD и выполняет cd;в этом случае PWD указывает на неправильный каталог.Используйте `` pwd ' rather than $ PWD '.

Поскольку CURDIR гарантированно работает в Make, в PWD может быть унаследовано от оболочки, предпочтение следует отдать первому.

...