Wie bekomme ich `machen`, um den Benutzer auffordern, ein Kennwort und speichern Sie es in eine Makefile variable?
Ich Schreibe ein Makefile, und einige der Befehle, die das makefile ausgeführt, benötigen Sie ein Kennwort. Ich möchte dem Benutzer die Möglichkeit, entweder geht dies in so einem Makefile Variablen, die mit make PASSWORD=password
oder wenn der Benutzer nicht weitergeben, dann fordert den Benutzer und speichern Sie Ihre Antwort in Sprach-Makefile-variable.
Im moment bin ich in der Lage zu überprüfen, die Makefile-variable, und dann als Teil meiner target-spezifische Regeln schreiben, die shell-Befehle, die den Benutzer auffordern, das Passwort und speichern Sie es in eine shell-variable. Aber diese variable ist nur verfügbar, um die spezifische Schale und nicht irgendwelche anderen.
Wie lese ich etwas aus der Benutzer-und speichern Sie in einer Variablen?
Ich habe versucht, die folgenden:
PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $pwd)
aber die Eingabeaufforderung ist nicht gedruckt. Ich habe auch versucht echo "Password: "
inneren Schale, die aber nicht ausgedruckt.
Irgendwelche Ideen?
Edit:
Klären, das Passwort muss gesetzt werden für ein bestimmtes Ziel, also ich habe so etwas wie dieses:
PASSWORD :=
my-target: PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $$pwd)
my-target:
# rules for mytarget that use $(PASSWORD)
Edit 2:
Habe das problem gefunden. Wenn ich PASSWORD :=
am Anfang des Skripts, es setzt PASSWORD
auf einen leeren string, und dies wiederum bewirkt, dass die ?=
übersprungen werden (da PASSWORD
) ist bereits gesetzt.
- Welchen Befehl muss ein Passwort? ssh? Konnte verwenden Sie ssh-login ohne Passwort statt? askubuntu.com/questions/46930/...
- Nein, nicht ssh. Ich muss curl 3 mal gegen einen service, der eine Authentifizierung erfordert. curl kann prompt für sein eigenes Kennwort, aber ich möchte lieber nicht erzwingen, dass der Benutzer geben Sie es 3 mal.
- Ich fühle mich wie Klartext-Passwörter in die Make-Variablen können anfällig für Ausbeutung. Ich bin mir nicht sicher, wie Sie es zu nutzen, aber es könnte leicht sein, dass ein böswilliger Benutzer-dump der makefile-Variablen (make-pn), und bekommen das Passwort. Just sayin' 😉
- Dieser Benutzer würde sich um den gleichen Benutzer ausgeführt machen und das Passwort einzugeben, es sei denn, ein anderer Benutzer Zugriff auf den Speicher des einen Befehl ausführen, durch den ersten Benutzer,... in diesem Fall, sind alle Wetten ab, und Ihre OS ist komplett gefährdet.
- Ja, wenn Ihr ein
curl
Passwort, ich weiß nicht von irgendeiner anderen Weise zu beschäftigen als das, was Sie tun. Ich denke, das worst-case-Szenario bin ich besorgt über jemand muss zum Debuggen von Makefiles in die Zukunft und Deponienmake -pn
logs auf die Festplatte irgendwo. Dann würde der böswillige Benutzer finden das Klartext-Passwort in der build-log.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein paar Dinge:
$
für die Dereferenzierung von shell-Variablenpwd
wird interpretiert durchmake
. Sie können Flucht aus machen mit$$
make
ist das aufrufen der shell als Posix-kompatibel/bin/sh
statt/bin/bash
. Als solche, die-s
optionread
wird nicht unterstützt.Versuchen Sie dies:
Dieser arbeitete für mich auf Ubuntu 12.04 /GNU make 3.81 /bash 4.2.25(1)
Und auf OSX 10.8.5 /make 3.81 /bash 3.2.48(1):
Update - @user5321531 wies darauf hin, dass wir verwenden können, POSIX
sh
stattbash
und vorübergehend unterdrücken echo mitstty
:?=
Teil vollständig. Vielen Dank für Ihre Kommentare. Die $$pwd war die andere Sache, die ich verpasste.stty -echo
und zu re-aktivierenstty echo
.