Ich versuche, ein Skript zum Bereitstellen von macOS zu erstellen, und das letzte Stück, das nicht automatisiert ist, ist die Installation von Homebrew. Aufgrund des einzigartigen Szenarios, in dem Homebrew nicht mit installiert werden sollte sudo
und sowohl die return
Taste als auch die Benutzer gedrückt werden müssen password
, ist es schwierig geworden, dies herauszufinden. Ich habe ein paar Stunden damit verbracht und andere unbeantwortete Fragen zu StackExchange gefunden, ohne Glück, es vollständig zu automatisieren.
Mein Code:
echo "Password: "
read -s PASSWORD
echo $PASSWORD | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Das Echo überspringt die Trefferanforderung, return
gibt aber das Passwort nicht weiter, da mir das -S
Flag fehlt, weil ich sudo bei der Installation von Homebrew nicht einbeziehen sollte. Ich brauche letztendlich ein Setup, das den Befehl trifft UND das Passwort übergibt, ohne sudo zu verwenden. Der Rest meines Skripts wird mit using ausgeführt, echo $PASSWORD | sudo -S my-command-here...
daher möchte ich nach Möglichkeit nicht zu weit von diesem Schema abweichen.
Die -s
Option funktioniert bei mir, daher weiß ich nicht, warum sie bei dir nicht funktioniert.
#!/bin/sh
Haben Sie versucht, (oder #!/bin/bash
) oben in Ihrem Skript hinzuzufügen ?
-n
Wenn Sie die Option on verwenden, echo
erhalten Sie die Eingabe in derselben Zeile wie das Label.
Das Folgende hat also die Eingabe: Password: <waiting for input>
, und in der nächsten Zeile wird einfach das eingegebene Passwort gedruckt - das awk
dient nur zum Testen, ob die Pipe funktioniert hat. Und dann habe ich eine Schleife hinzugefügt, damit immer etwas eingegeben werden muss.
#!/bin/sh
readPassword
echo $PASSWORD | awk '{print $1}'
readPassword() {
echo -n "Password: "
read -s PASSWORD
echo ""
if [[ -z "$PASSWORD" ]]; then
printf '%s\n' "A password is required..."
readPassword
fi
}
#!/bin/bash
oben in das eigentliche Skript eingefügt. Die -n
Flagge ist eine schöne Ergänzung, danke! Dies behebt jedoch nicht wirklich das Homebrew-Installationsproblem in meiner ursprünglichen Frage. Ich habe andere Befehle, um echo $PASSWORD | sudo -S systemsetup -setremotelogin on
mit dem -S
Flag zu arbeiten, aber ich muss sudo einschließen, damit sie funktionieren. Homebrew sollte nicht über sudo installiert werden, daher funktioniert dieses Setup nicht, es sei denn, mir fehlt etwas.return
muss me und geben Sie das Passwort an der Eingabeaufforderung ein. Bei der Installation von Homebrew wird nach einem Passwort gefragt.
kein Hang
/usr/local
bevor Sie Homebrew installieren?Justin Hammond
kein Hang
kein Hang
echo PASSWORD | sudo -S
eine schlechte Praxis ist (zumindest aus Sicherheitsgründen), scheint Ihr Problem darauf zurückzuführen zu sein, dass innerhalb des Homebrew-Installationsskriptssudo
ohne aufgerufen wird .-S
Daher möchten Sie vielleicht nach Möglichkeiten fragen, um zu verhindern, dass Homebrew überhaupt versucht, sudo zu verwenden (weiß nicht, ob dies möglich ist) oder nach Möglichkeiten, Ihr Skript zu ändern, um dies zu umgehen.