Я пишу Makefile, и некоторые из команд, которые запускают makefile, требуют пароля. Я хотел бы предоставить пользователю возможность передать это как переменную Makefile, используя make PASSWORD=password
, или если пользователь не передает его, затем предложите пользователю его и сохраните свой ответ в указанной переменной Makefile.Как мне заставить `make` запрашивать у пользователя пароль и хранить его в переменной Makefile?
На данный момент я могу проверить переменную Makefile, а затем как часть моих целевых конкретных правил написать команды оболочки, которые запрашивают пароль пользователя и сохраняют его в переменной оболочки. Однако эта переменная доступна только для этой конкретной оболочки, а не для других.
Как я могу что-то прочитать у пользователя и сохранить его в переменной?
Я попытался следующие:
PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $pwd)
но подсказка никогда не печатается. Я также пробовал echo "Password: "
внутри оболочки, но это тоже не печатается.
Любые идеи?
Edit:
Для уточнения, пароль должен быть установлен для определенной цели, так что у меня есть что-то вроде этого:
PASSWORD :=
my-target: PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $$pwd)
my-target:
# rules for mytarget that use $(PASSWORD)
Edit 2:
I нашел проблему. Когда я устанавливаю PASSWORD :=
в начале скрипта, он устанавливает PASSWORD
в пустую строку, и это, в свою очередь, вызывает пропущение ?=
(начиная с PASSWORD
).
Какая команда нужна пароль? SSH?Вместо этого вы можете использовать ssh-passwordless login? http://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login –
нет, не ssh. Мне нужно запустить завиток 3 раза против службы, требующей аутентификации. curl может запросить собственный пароль, но я бы не принуждал пользователя вводить его 3 раза. – bluesmoon
Я чувствую, что пароли открытого текста в переменных переменных могут быть уязвимы для эксплуатации. Я не уверен, как его использовать, но злоумышленнику может быть легко сбросить переменные makefile (make -pn) и получить этот пароль. Just sayin ';-) –