Я пишу Makefile, и для некоторых команд, запускаемых makefile, требуется пароль. Я хотел бы дать пользователю возможность либо передать это как переменную Makefile, используя make PASSWORD=password
, либо, если пользователь не передаст ее, запросить у пользователя это и сохранить свой ответ в указанной переменной Makefile.
На данный момент я могу проверить переменную Makefile, а затем, как часть моих целевых правил, написать команды оболочки, которые запрашивают у пользователя пароль и сохраняют его в переменной оболочки. Однако эта переменная доступна только для этой конкретной оболочки, а не для какой-либо другой.
Как прочитать что-то от пользователя и сохранить в переменной?
Я пробовал следующее:
PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $pwd)
но подсказка никогда не печатается. Я также пробовал echo "Password: "
внутри оболочки, но это тоже не печатается.
Любые идеи?
Изменить:
Чтобы уточнить, пароль нужно установить для конкретной цели, поэтому у меня что-то вроде этого:
PASSWORD :=
my-target: PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $$pwd)
my-target:
# rules for mytarget that use $(PASSWORD)
Редактировать 2:
Я нашел проблему. Когда я устанавливаю PASSWORD :=
в верхней части скрипта, он устанавливает PASSWORD
в пустую строку, а это, в свою очередь, приводит к тому, что ?=
пропускается (поскольку PASSWORD
) уже установлено.
curl
, я не знаю другого способа справиться с ним, кроме того, что вы делаете. Я предполагаю, что наихудший сценарий, о котором я беспокоюсь, это то, что кому-то нужно будет отлаживать ваш Makefile в будущем и сбрасыватьmake -pn
журналов куда-то на диск. Затем злоумышленник увидит открытый пароль в журнале сборки. - person Digital Trauma   schedule 19.12.2013